我已经实现了一个自定义的html辅助扩展方法,将部分视图呈现到我的剃刀页面中,我担心我使用的方法“太重了”......
我想在我的网络项目中使用一个普通的微调器。我正在使用的微调器需要许多元素:
<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);
}
}
这似乎是渲染微调器所需的大量处理。这种方法的性能开销是多少?在这种情况下使用助手是正常的,还是我过度使用了这个?是否有更好的(更高效的)方法呢?
我非常喜欢易用性但关注性能(例如,我可以使用@Html.RenderPartial(...)
,但是我必须记住spinner部分的名称,等等。帮助器方法包装器是这样的更容易使用)
答案 0 :(得分:2)
要使用扩展方法呈现部分视图,您可以使用Partial()
的内置HtmlHelper
方法。它可以简单地
public static MvcHtmlString PanelSpinner(this HtmlHelper html)
{
return html.Partial("PanelSpinner");
}
注意:您需要加入using System.Web.Mvc.Html;