我将编辑器模板与自定义母版页一起使用,以便
Html.EditorFor(o => o.Name)
生成标签和输入,我还使用自定义DisplayName属性来本地化标签
[DisplayNameLocalized("Name")]
public string Name {get;set;}
我在属性的构造函数中放了一个断点,并注意到它只在我第一次使用EditorFor渲染页面时被调用,所以我猜编辑器的结果是缓存的,任何人都知道如何避免这个缓存?
答案 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;文件发布选项。