1

HTML ヘルパーで出力キャッシュを使用しようとしています。ただし、属性が設定されていても、ヘルパー メソッドが呼び出されると、このコード ブロックが常に入力されます。このシナリオでは outputcache 属性が機能しないため、Html ヘルパーで「高価な」クエリをキャッシュする推奨される方法は何ですか?

     [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));
    }
4

1 に答える 1

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 を使用してレンダリングできます。

于 2012-09-24T18:49:23.913 に答える