mvc编辑器模板结果被缓存

时间:2011-03-09 13:12:42

标签: asp.net-mvc

我将编辑器模板与自定义母版页一起使用,以便

Html.EditorFor(o => o.Name)

生成标签和输入,我还使用自定义DisplayName属性来本地化标签

[DisplayNameLocalized("Name")]
public string Name {get;set;}

我在属性的构造函数中放了一个断点,并注意到它只在我第一次使用EditorFor渲染页面时被调用,所以我猜编辑器的结果是缓存的,任何人都知道如何避免这个缓存?

3 个答案:

答案 0 :(得分:4)

理想情况下,您需要在Action上使用[NoCache]属性。

public class NoCacheAttribute : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
        filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
        filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        filterContext.HttpContext.Response.Cache.SetNoStore();

        base.OnResultExecuting(filterContext);
    }
}

也可以在模板中使用<%@ OutputCache %>指令 - 但有些人抱怨它并不总是有效。

参考外观here

您可以使用<%@ OutputCache NoStore="true" %>

答案 1 :(得分:2)

我遇到过同样的问题。这对我有用

public ActionResult Index(int? pageNumber)
        {
            var wishlistModel = new WishlistModel();
            BindGifts(wishlistModel, pageNumber);
            if (Request.IsAjaxRequest())
            {
                ViewData.ModelState.Clear();
                return PartialView("_UserGiftList", wishlistModel);
            }

            return View(wishlistModel);
        }

在对MVC源代码进行一些挖掘之后,我发现所有Html帮助程序都从ViewData.ModelState对象获取数据,并且在ajax请求之后缓存了ModelState缓存的未知原因。

答案 2 :(得分:0)

部署到Azure网站时遇到类似问题。一直在展示旧版的EditorTemplate。我尝试手动发布cshtml文件,我尝试FTPing到网站并删除Views文件夹和Bin文件夹;但是这个编辑模板的幽灵仍在困扰着这个网站!

最终有效的方法是检查构建&gt;下删除目的地的其他文件选项发布&gt;设置&gt;文件发布选项