将ASP.NET MVC Razor @helper函数转换为助手类的方法
考虑以下定义了帮助程序的ASP.NET MVC剃刀视图片段
@helper FieldFor<TModel>(Expression<Func<TModel, string>> expression){
<div class="form-group">
@Html.LabelFor(expression,
htmlAttributes:
new {@class = "control-label col-md-2"})
<div class="col-md-10">
@Html.EditorFor(expression,
new
{
htmlAttributes =
new {@class = "form-control"}
})
@Html.ValidationMessageFor(expression, "",
new {@class = "text-danger"})
</div>
</div>
}
将其转换为类似以下类的方法的模式是什么:
public static MvcHtmlString FieldFor(this HtmlHelper helper, FieldFor<TModel>(Expression<Func<TModel, string>> expression)){
/* Method */
}
我发现的所有示例都集中在生成不依赖于其他HTML帮助器的标记上。
回答:
签名必须是
public static MvcHtmlString FieldFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression)
然后,您可以结合使用TagBuilder和内置的html helper方法来生成html
using System;using System.Linq.Expressions;
using System.Text;
using System.Web.Mvc;
using System.Web.Mvc.Html;
namespace YourAssembly.Html
{
public static class FieldHelper
{
public static MvcHtmlString FieldFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression)
{
MvcHtmlString label = LabelExtensions.LabelFor(helper, expression, new { @class = "control-label col-md-2" });
MvcHtmlString editor = EditorExtensions.EditorFor(helper, expression, new { htmlAttributes = new {@class = "form-control"}})
MvcHtmlString validation = ValidationExtensions.ValidationMessageFor(helper, expression, null, new { @class = "text-danger" });
StringBuilder html = new StringBuilder();
html.Append(editor);
html.Append(validation);
TagBuilder innerDiv = new TagBuilder("div");
innerDiv.AddCssClass("col-md-10");
innerDiv.InnerHtml = html.ToString();
html = new StringBuilder();
html.Append(label);
html.Append(innerDiv.ToString());
TagBuilder outerDiv = new TagBuilder("div");
outerDiv.AddCssClass("form-group");
outerDiv.InnerHtml = html.ToString();
return MvcHtmlString.Create(outerDiv.ToString());
}
}
}
然后,您可以将其添加到所有视图中 web.config
<system.web.webPages.razor> <pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
....
<add namespace="YourAssembly.Html" />
</namespaces>
以上是 将ASP.NET MVC Razor @helper函数转换为助手类的方法 的全部内容, 来源链接: utcz.com/qa/416482.html