缓存的部分视图中的代码块

时间:2014-10-08 21:51:33

标签: c# for-loop outputcache asp.net-mvc-partialview

我在部分视图上使用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的开发人员:是否可以添加对输出缓存执行代码块的支持?或者有没有办法配置输出缓存来执行代码块?

0 个答案:

没有答案