【发布时间】:2009-08-03 10:41:47
【问题描述】:
我想要一个动作,在第一次请求时将视图结果保存到 HTML 文件然后返回视图,在下一个请求中 MvcHandler 将只指向这个生成的 HTML 文件而不引用控制器,这样我可以避免在通常保持静态的页面中进行一些繁重的数据库工作。
如何做到这一点?
【问题讨论】:
标签: asp.net-mvc
我想要一个动作,在第一次请求时将视图结果保存到 HTML 文件然后返回视图,在下一个请求中 MvcHandler 将只指向这个生成的 HTML 文件而不引用控制器,这样我可以避免在通常保持静态的页面中进行一些繁重的数据库工作。
如何做到这一点?
【问题讨论】:
标签: asp.net-mvc
您不必这样做。只需使用 OutputCache 属性即可。
【讨论】:
我在 Dan Atkinson 为这个问题给出的答案中找到了我想要的东西:
Rendering a view to a string in MVC, then redirecting — workarounds?
【讨论】:
虽然您所描述的确实是一种可能的加速策略,但 OutputCache 是一种可行的替代方案。
输出缓存在内存中存在有限的时间。另请注意,如果您编写 HTML 文件,将涉及写入操作。您可能还需要一种机制来刷新您编写的 HTML 文件。
如果您想坚持自己的策略(从服务器读取文件),您可以轻松做到。
在控制器中,您可以像这样检查您的文件是否存在。
public ContentResult MyPage()
{
if(System.IO.File.Exists(Server.MapPath("myFile.html"))
{
return Content(System.File.ReadAllText("myFile.html");
}
else
{
GenerateMyFile(); //This function generates the file
return Content(System.File.ReadAllText("myFile.html");
}
}
【讨论】: