2016-12-17 60 views
0

我已經實現了自定義html助手擴展方法來呈現我的剃鬚刀頁面的局部視圖,我擔心我使用的方法是「太重」...這是HtmlHelper擴展過度殺傷力?

我想使用在我的web項目中常見的微調。我使用的微調需要許多元素:

<div class="panel-spinner-container"> 
    <div class="sk-spinner sk-spinner-cube-grid"> 
     <div class="sk-cube"></div> 
     <div class="sk-cube"></div> 
     <div class="sk-cube"></div> 
     <div class="sk-cube"></div> 
     <div class="sk-cube"></div> 
     <div class="sk-cube"></div> 
     <div class="sk-cube"></div> 
     <div class="sk-cube"></div> 
     <div class="sk-cube"></div> 
    </div> 
    <div class="panel-spinner-msg"><p>loading...</p></div> 
</div> 

不是包括這剃刀代碼中,我希望有一個微調每一次,我想我會折騰到HTML的輔助方法,所以我可以做此:

<div> 
    @Html.PanelSpinner() 
</div> 

我創建該一個局部視圖,其只包含從上面的div,和一個HTML輔助擴展方法:

public static MvcHtmlString PanelSpinner(this HtmlHelper html) { 

    var controllerContext = html.ViewContext.Controller.ControllerContext; 
    var viewData = html.ViewData; 
    var tempData = html.ViewContext.TempData; 

    using (var stringWriter = new System.IO.StringWriter()) { 

     var viewResult = ViewEngines.Engines.FindPartialView(controllerContext, "PanelSpinner"); 
     var viewContext = new ViewContext(controllerContext, viewResult.View, viewData, tempData, stringWriter); 

     viewResult.View.Render(viewContext, stringWriter); 
     var stringResult = stringWriter.GetStringBuilder().ToString(); 

     return new MvcHtmlString(stringResult); 
    } 
} 

這似乎是非常多的處理REQ的用於呈現微調。這種方法的性能開銷是多少?對這種場景使用助手是否正常?還是我過度使用這種場景?有沒有更好的(更高性能)的方式來做到這一點?

我非常喜歡易用性,但擔心性能問題(例如,我只能使用@Html.RenderPartial(...),但後來我必須記住spinner partial的名稱等等。輔助方法包裝器更容易使用)

+0

怎麼樣只用CSS? 這傢伙只用css製作紡紗人http://tobiasahlin.com/spinkit/ –

+0

你需要'記住'的唯一東西是「PanelSpinner」。你的擴展方法可以簡單地爲'public static MvcHtmlString PanelSpinner(this HtmlHelper html){return html.Partial(「PanelSpinner」); }' –

+0

對我來說看起來很好,這就是你的頁面上呈現了一百萬個其他的東西,爲什麼你的東西會南下呢?這不像是你的微調器每幀渲染一次......你給每個微調器打個電話,我們在這裏談論多少個微調器? – Charleh

回答

2

要使用擴展方法渲染局部視圖,可以使用內置的Partial()方法HtmlHelper。它可以簡單地

public static MvcHtmlString PanelSpinner(this HtmlHelper html) 
{ 
    return html.Partial("PanelSpinner"); 
} 

注意:您需要包括using System.Web.Mvc.Html;