这个 HtmlHelper 扩展是矫枉过正吗?



我已经实现了一个自定义的 html 帮助程序扩展方法来将部分视图呈现到我的 razor 页面中,我担心我使用的方法"太重"......

我想在我的 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>

与其每次我想要微调器时都将其包含在 razor 代码中,我想我会将其扔到 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(...),但随后我必须记住微调器部分的名称等。 帮助程序方法包装器非常易于使用)

要使用扩展方法呈现分部视图,您可以使用内置的Partial()HtmlHelper方法。它可以简单地

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

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

相关内容

  • 没有找到相关文章

最新更新