6

我对OutputCache在 ASP.NET MVC 中使用该属性相当陌生。


静态页面

我已经在我的网站上的静态页面上启用了它,代码如下:

[OutputCache(Duration = 7200, VaryByParam = "None")]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        //...

如果我理解正确,我将整个控制器缓存了 7200 秒(2 小时)。


动态页面

但是,它如何处理动态页面?通过dynamic,我的意思是用户必须在哪里提交表单。

例如,我有一个带有电子邮件表单的页面。这是该代码的样子:

public class ContactController : Controller
{
    //
    // GET: /Contact/

    public ActionResult Index()
    {
        return RedirectToAction("SubmitEmail");
    }

    public ActionResult SubmitEmail()
    {
        //In view for CAPTCHA: <%= Html.GenerateCaptcha() %>
        return View();
    }

    [CaptchaValidator]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult SubmitEmail(FormCollection formValues, bool captchaValid)
    {
        //Validate form fields, send email if everything's good...

            if (isError)
            {
                return View();
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }

    }

    public void SendEmail(string title, string name, string email, string message)
    {
        //Send an email...

    }
}

如果我在这里将 OutputCache 应用到整个控制器会发生什么?

HTTP POST 表单提交会起作用吗?另外,我的表格有一个验证码;这会改变方程式中的任何东西吗?

换句话说,使用动态页面进行缓存的最佳方法是什么?

提前致谢。

4

1 回答 1

1

通过利用输出缓存,您可以显着提高 ASP.NET MVC 应用程序的性能。与每次请求页面时都重新生成页面不同,该页面可以生成一次并缓存在内存中以供多个用户使用。

您要实施的第一个方案是不合适的。请记住一件事,输出缓存应仅在不影响您的业务逻辑的时候使用,您希望减少服务器负载和 Sql 数据检索频繁使用的页面但不经常更新数据。

幸运的是,有一个简单的解决方案。您可以利用 ASP.NET 框架的一项称为缓存后替换的功能。缓存后替换使您能够替换已缓存在内存中的页面中的动态内容。

http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/adding-dynamic-content-to-a-cached-page-cs

于 2015-06-25T08:23:18.353 回答