【问题标题】:ASP.NET MVC saving a rendered view to htmlASP.NET MVC 将呈现的视图保存到 html
【发布时间】:2009-08-03 10:41:47
【问题描述】:

我想要一个动作,在第一次请求时将视图结果保存到 HTML 文件然后返回视图,在下一个请求中 MvcHandler 将只指向这个生成的 HTML 文件而不引用控制器,这样我可以避免在通常保持静态的页面中进行一些繁重的数据库工作。

如何做到这一点?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    您不必这样做。只需使用 OutputCache 属性即可。

    http://www.asp.net/learn/mvc/tutorial-15-cs.aspx

    【讨论】:

    • 1.这是使用文件系统进行缓存还是在内存中? 2. 如果可能,我可能想跳过该操作并将用户从自定义 MvcHandler 移动到 Html 文件,这有意义吗?
    • 据我所知,OutputCache 属性使用asp.net 的缓存。您可以参考文档 (msdn.microsoft.com/en-us/library/xsbfdd8c.aspx) 以获取这些问题的答案。
    【解决方案2】:

    我在 Dan Atkinson 为这个问题给出的答案中找到了我想要的东西:

    Rendering a view to a string in MVC, then redirecting — workarounds?

    【讨论】:

    • OutputCache 在这种情况下不起作用有什么具体原因吗?老实说:如果我是一名开发人员,负责此应用程序的维护,我希望看到某种类型的标准缓存到位——而不是一些自制的东西,除非你有充分的理由它。
    • 事实是我不确定我的想法是否最适合缓存页面,我想你是对的。我认为如果内容是静态的,就没有理由一次又一次地生成页面,我也可以节省一些数据库工作。你确定这是一个不好的方法吗?
    【解决方案3】:

    虽然您所描述的确实是一种可能的加速策略,但 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");
        }
    }
    

    【讨论】:

    • 我仍然不确定这样做的最佳方法是什么。但我想测试两者。我的问题实际上是关于实现这个 GenerateMyFile() 方法。有什么想法吗?
    猜你喜欢
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多