这个HtmlHelper扩展是否过度杀伤?

时间:2016-12-17 11:43:03

标签: asp.net-mvc html-helper

我已经实现了一个自定义的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部分的名称,等等。帮助器方法包装器是这样的更容易使用)

1 个答案:

答案 0 :(得分:2)

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

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

注意:您需要加入using System.Web.Mvc.Html;