【问题标题】:Why is my asp:Substitution control suddenly not working in ASP.NET 4.0?为什么我的 asp:Substitution 控件在 ASP.NET 4.0 中突然不起作用?
【发布时间】:2010-04-18 02:50:00
【问题描述】:
我刚刚将我的网站从 ASP.NET 3.5 升级到 4.0。我一直在努力进行一些重大更改,并且超出了我的预期。
然而,我无法弄清楚为什么我的<asp:Substitution /> 控件突然停止正常工作。它应该忽略父页面的输出缓存设置并在每次请求时更新。由于某种原因,这没有发生。它缓存了整整 10 分钟(我主页的 OutputCache 设置)。有什么想法吗?
【问题讨论】:
标签:
asp.net-mvc-2
outputcache
asp.net-4.0
substitution
【解决方案1】:
和其他服务器控件在 MVC 中不受支持。特别是响应替换与 WebForms 管道有着错综复杂的联系。它在 MVC 1 中工作的事实是一个愉快的意外,但不是故意的。
MVC 团队正在研究在 MVC 3 及更高版本中启用替换缓存的方法,但可能会有特定于 MVC 的机制来执行此操作,因此您不应期望 或 Response.WriteSubstitution()继续工作。同时,最好的选择是输出缓存整个页面,然后使用Javascript/AJAX让客户端填写需要更新的部分。
【讨论】:
-
谢谢李维。我找到了另一种解决方法。我改变了我的策略,因为实际上只有一个页面部分可以从缓存中受益。事实证明,如果您将其添加到页面中,就好像它是 Web 窗体控件一样,可以在 Partial View 上使用 OutputCache 指令...highoncoding.com/Articles/…
-
我会避免在 .ascx 上使用 ,因为它也是一个丑陋的 hack,并且不能保证继续工作(就像替换缓存如何被破坏一样)。如果您只需要缓存页面的一部分,请考虑使用 MVC Futures for ASP.NET 4 (aspnet.codeplex.com/releases/view/41742) 中的 [ChildActionCache] 属性。该属性可以应用于作为 Html.RenderAction() 目标的方法,并且仅该 RenderAction() 的内容将被缓存指定的时间段。