2012-09-24 3 views
1

HTML 도우미에서 출력 캐싱을 사용하려고합니다. 그러나 속성 세트가 있어도이 코드 블록은 Helper 메서드가 호출 될 때 항상 입력됩니다. 이 시나리오에서는 outputcache 특성이 작동하지 않으므로 HTML 도우미에서 "비싼"쿼리를 캐싱하는 것이 좋습니다.MVC 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)); 
    } 

답변

0

출력 캐싱을 사용하면 작업 방법의 결과를 웹 서버의 메모리에 저장할 수 있습니다. 예를 들어, 동작 메서드가 뷰를 렌더링하면 뷰 페이지가 캐시됩니다. 이 캐시 된 페이지는 이후 요청에 대해 응용 프로그램에서 사용할 수 있습니다. 출력 캐싱을 사용하면 작업 메서드의 결과를 다시 만드는 데 걸리는 시간과 리소스가 절약됩니다.

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을 사용할 수 있습니다 예

수정되지 액션 메소드이 attribure을 사용 하나