我在部分视图上使用OutputCache,该视图还包含来自ForLoop.HtmlHelpers的帮助函数,以帮助在结束<body>
标记之前渲染脚本块。
<p>
<span class='some-class'>@Model.somedata</span>
<span class='placeholder'>@Model.anotherdata</span>
</p>
using (Html.BeginScriptContext())
{
Html.AddScriptBlock(
@<script>
(function () {
// do some work, could be ajax loading or any html formatting in js
}());
</script>
);
}
这是我的样本控制器功能:
[ChildActionOnly]
[OutputCache(Duration = 120)] // using 120 sec as a sample
public PartialViewResult SomePartialView()
{
using (Entities entities = new Entities())
{
return PartialView("SomePartialView", entities.GetMeSomeData());
}
}
显而易见的问题是输出缓存会导致Html.AddScriptBlock(...)
无法执行,因为它只会从之前吐出缓存的部分视图结果,并且不会继续执行局部视图内的任何C#代码(cshtml文件) ) - 因此在使用缓存结果时无法添加所需的脚本块。当然,我可以通过调用将脚本块添加到父容器页面来解决这个问题,但这对我来说似乎并不理想。第一个问题是,是否有人对解决这一特定问题有更好的想法或建议?也许我错过了对这个问题的明显和更好的解决方法。
为了深入了解我试图解决的问题的背景,我们在页面上显示了一些结果,但需要一些自定义时间戳让用户知道它的年龄(自定义消息)喜欢&#34; 6分钟前&#34;,&#34;一小时前&#34;等等)。显然,缓存的结果将显示陈旧的消息,因此我使用javascript在页面加载时显示正确的格式化消息。将来,我们还希望为部分视图执行一些特定数据的延迟加载,我们希望输出缓存。
第二个问题是ForLoop.HtmlHelpers的开发人员:是否可以添加对输出缓存执行代码块的支持?或者有没有办法配置输出缓存来执行代码块?