将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

回到顶部