什么是在MVC HTML Helper中缓存“昂贵”查询的推荐方法?

时间:2012-09-24 15:53:44

标签: model-view-controller html-helper outputcache

我正在尝试在HTML Helper上使用输出缓存。但是,即使设置了属性,也会在调用Helper方法时输入此代码块。由于outputcache属性在这种情况下不起作用,在Html Helpers中缓存“昂贵”查询的推荐方法是什么?

     [OutputCache(Duration = 60)]
     public static MvcHtmlString CountryDropDownListFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object selectedValue)
    {
        var doc = new XmlDocument();
        doc.Load(HttpContext.Current.Server.MapPath("~/App_Data/countries.xml"));

        var items = new Dictionary<string, string>();

        foreach (XmlNode node in doc.SelectNodes("//country"))
        {
            items.Add(node.InnerText, node.InnerText);
        }

        return html.DropDownListFor(expression, new SelectList(items, "key", "value", selectedValue));
    }

1 个答案:

答案 0 :(得分:0)

输出缓存允许您将操作方法​​的输出存储在Web服务器的内存中。例如,如果操作方法呈现视图,则将缓存视图页面。然后,此缓存页面可供应用程序用于后续请求。输出缓存为您的应用程序节省了重新创建操作方法结果所需的时间和资源。

在ASP.NET MVC中,您可以使用OutputCacheAttribute属性来标记要缓存其输出的操作方法。如果使用OutputCacheAttribute属性标记控制器,则将缓存控制器中所有操作方法的输出。

详情http://msdn.microsoft.com/en-us/library/system.web.mvc.outputcacheattribute(v=vs.108).aspx

您使用此举报非行动方法

正确的例子

[OutputCache(Duration = 50000)]
public ActionResult CountryDropDownListFor()
{
   // Code 
}

在您的视图中,您可以使用Html.PartialAction渲染一个