Отобразить 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
Выполните следующие действия
- Создайте вид в папке
~/views/shared
. дать ему имя test.cshtml
.
- Скопируйте содержимое HTML в нем.
- Используйте
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');