我有一个部分视图,用于2个地方,一个是使用手动添加的HtmlPrefix的帖子模型中的视图模型,所以字段ID如下所示:
id="Model_Address_AddressLine1"
在另一个地方,我不需要视图模型,ID只是" AddressLine1"。然而,这是相同的局部视图。
但是,如果我使用" Model_Address_AddressLine1"访问该页面首先,IIS缓存这个局部视图,然后当我转到另一个页面时,它不会建模绑定和验证,因为id被缓存为" Model.Address.AddressLine1"它并没有拉动地址线#34;。
我已经尝试将ajax调用设置为cache:false并在OutputCache属性上设置NoStore,但它仍然缓存部分视图模型ID和名称,有没有办法阻止它执行此操作?
如果有帮助的话,添加了这段代码,这是帮助代码,它在部分视图的其中一个页面上添加前缀,而不是另一个:
return helper.Partial(partialName, accessor.Compile().Invoke(helper.ViewData.Model),
new ViewDataDictionary(helper.ViewData)
{
TemplateInfo = new TemplateInfo
{
HtmlFieldPrefix = prefix
}
})
响应标头确认缓存:
接受:text / html的,应用/ XHTML + xml的,应用/ XML; Q = 0.9,图像/ WEBP, / 的; Q = 0.8 接受编码:gzip,放气,SDCH 接受语言:EN-US,EN; Q = 0.8 缓存控制:最大年龄= 0 连接:保持活跃 饼干:__ RequestVerificationToken = qnKmH92lRoXCZWl_146N3uPiGRnWJCRZis6V_6cQ7mUJUdlVfAQVAxeTBtnhdTgM2s_NezoZghhwCrqBrv4GcjrCZr0XhG-6bHq7kfhlRrw1; ASP.NET_SessionId = dh225cux11sckpxl2uke30q3; FedAuth = 77u / PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48U2VjdXJpdHlDb250ZXh0VG9rZW4gcDE6SWQ9Il9iZTI5MDk4OC01ZjdjLTQyZTktYjMxOS0zOGJhYzM5OTBlMjctMzg3NTUxQjQyM0JENjFDQzIwMEQyQTc2MTRBQzBDMDYiIHhtbG5zOnAxPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXdzc2VjdXJpdHktdXRpbGl0eS0xLjAueHNkIiB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3Mtc3gvd3Mtc2VjdXJlY29udmVyc2F0aW9uLzIwMDUxMiI + PElkZW50aWZpZXI + dXJuOnV1aWQ6YTM1MWFmNjItYzU0Mi00MzQ2LWI2NzYtNGIyNjE0Y2YxMjU2PC9JZGVudGlmaWVyPjwvU2VjdXJpdHlDb250ZXh0VG9rZW4 + 主持人:127.0.0.1:444 User-Agent:Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 34.0.1847.131 Safari / 537.36 响应标题来源 缓存控制:无缓存,无存储 内容编码:gzip 内容长度:9958 内容类型:text / html的;字符集= utf-8的 日期:2014年5月13日星期二08:15:52 GMT 到期日:-1 附注:无缓存 有所不同:接受编码 X框-选项:SAMEORIGIN
答案 0 :(得分:0)
如果您将RenderPartial更改为RenderAction - 即使OutputCache也适合您。 [OutputCache(Duration=0)]
我为此目的使用了自定义属性,它也可能对您有所帮助:
public class NoCache : 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);
}
}
M.B。 Phil Haack的文章"Donut Hole Caching in ASP.NET MVC"也会帮助你吗?