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

Is this HtmlHelper extension overkill?

我已经实现了自定义 html 辅助扩展方法来将部分视图呈现到我的剃刀页面中,我担心我使用的方法是 "too heavy"...

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

渲染微调器似乎需要大量处理。这种方法的性能开销是多少?在这种情况下使用助手是正常的,还是我过度杀伤了这个?有没有更好(性能更高)的方法来做到这一点?

我非常喜欢易用性,但担心性能(例如,我可以只使用 @Html.RenderPartial(...),但我必须记住微调器部分的名称等。辅助方法包装器更容易使用)

要使用扩展方法渲染局部视图,您可以使用 HtmlHelper 的内置 Partial() 方法。可以简单地

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

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