在ASP.NET MVC视图中呈现HTML文件?

Tru*_*an1 23 asp.net asp.net-mvc razor asp.net-mvc-4

在我看来,想要将HTML文件的内容呈现为部分视图.当我将它添加到.cshtml视图时,它给了我这个错误:

@Html.Partial(Url.Content("~/Test/main.html"))
Run Code Online (Sandbox Code Playgroud)

错误:

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
Run Code Online (Sandbox Code Playgroud)

虽然文件在那里.我应该采取不同的方式吗?

Sel*_*enç 33

你无法使用它Html.Partial.它是一种用于渲染部分视图的特殊辅助方法.相反,您可以添加Action如下:

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

您可以View使用Html.Action帮助程序从您的方法调用它:

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

  • 请注意,这会打开一个漏洞,因为任何人都可以使用该控制器操作来获取您网站上的任何文件.最简单的解决方法是将`[ChildActionOnly]`属性应用于控制器操作,以便浏览器无法直接访问它. (14认同)
  • @SelmanGençPer@ Slight的评论,请编辑你的答案,包括`[ChildActionOnly]`属性,以便其他人不会简单地复制和粘贴你的代码而不查看评论.我刚刚测试它没有该属性,我可以看看我的web.config等. (3认同)

Ank*_*ain 6

跟着这些步骤

  1. 在〜/ views/shared文件夹中创建一个视图.给它起名称test.cshtml
  2. 复制其中的html内容.
  3. 在页面上使用html.partial("test")来呈现该视图的html


Mah*_*vcs 6

我认为这是一个更好的解决方案:WriteFileResponse对象中使用

@Response.WriteFile(pathToMyHtmlFile)
Run Code Online (Sandbox Code Playgroud)

取自这里


Fan*_*ers 5

简单的答案是将main.html文件重命名为main.cshtml,Razor视图引擎将识别该文件以进行渲染.