Отобразить HTML файл в представлении ASP.NET MVC?

На мой взгляд, хотелось бы отобразить содержимое HTML файла в виде частичного представления. Это дает мне эту ошибку, хотя, когда я добавляю это в представление .cshtml:

@Html.Partial(Url.Content("~/Test/main.html"))

Ошибки:

Exception Details: System.InvalidOperationException: The partial view '/Scripts/main.html' was not found or no view engine supports the searched locations. The following locations were searched:
/Scripts/main.html

Файл физически существует. Есть ли другой способ, которым я должен это делать?

Ответы

Ответ 1

Вы не можете использовать Html.Partial для этого. Это специальный вспомогательный метод для рендеринга Partial Views. Вместо этого вы можете добавить Action следующим образом:

[ChildActionOnly]
public ActionResult GetHtmlPage(string path)
{
   return new FilePathResult(path, "text/html");
}

И вы можете вызвать его из своего View с помощью Html.Action helper Method:

@Html.Action("GetHtmlPage","controllername", new { path = "~/Test/main.html" })

Ответ 2

Выполните следующие действия

  1. Создайте вид в папке ~/views/shared. дать ему имя test.cshtml.
  2. Скопируйте содержимое HTML в нем.
  3. Используйте Html.Partial("test") на странице, чтобы отобразить HTML этого представления.

Ответ 3

Я думаю, что это лучшее решение: Используйте WriteFile из объекта Response

@Response.WriteFile(pathToMyHtmlFile)

взято из здесь

Ответ 4

Простым ответом является переименование файла main.html в main.cshtml, который будет распознаваться механизмом просмотра Razor для рендеринга.

Ответ 5

Вы можете использовать это в своем представлении cshtml:

@{this.GetOutputWriter().Write(File.ReadAllText(Server.MapPath("/your/static/file.html")));}

Ответ 6

Просто используйте ajax-запрос для извлечения html файла, выводящего содержимое в ваш основной html. Поскольку это html файл, он будет кэшироваться в последующих вызовах, и влияние производительности не будет.

Ответ 7

Совершенно другой способ просто загрузить файл в JavaScript

<div id="loadId">
</div>

<script>
    $(document).ready(function () {
        $('#loadId').load('filepath');
    });
</script>

Вы можете установить путь к файлу в контроллере или поместить его в модель, если хотите, и использовать:

$('#loadId').load('@ViewBag.filepath');