这个 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;
我已经实现了自定义 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;