如何为Html.Label创建一个ASP.Net MVC Helper,它接受属性?
目前,当我定义一个Html.TextBox时,我可以传入一个属性列表。有点像下面这样:
new {disabled="disabled", @class="pcTextBoxWithoutPaddingDisabled"})%>
然而,它看起来并不像Html.Label具有此功能。因此,我必须使用label标签定义我的标签。有点像下面这样:
<label class="pcLabelBlackWithoutPadding">
我想与我的Html元素如何创建保持一致。
那么,如何创建一个Html.Label,它将包含属性列表?
感谢您的帮助。
答案 0 :(得分:9)
这是MVC3的更新版本:
public static MvcHtmlString Label(this HtmlHelper helper, String htmlFieldName, String labelText, Object htmlAttributes)
{
ModelMetadata metadata = ModelMetadata.FromStringExpression(htmlFieldName, helper.ViewData);
String innerText = labelText ?? (metadata.DisplayName ?? (metadata.PropertyName ?? htmlFieldName.Split('.').Last()));
if (String.IsNullOrEmpty(innerText))
{
return MvcHtmlString.Empty;
}
TagBuilder tagBuilder = new TagBuilder("label");
tagBuilder.Attributes.Add("for", TagBuilder.CreateSanitizedId(helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName)));
tagBuilder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
tagBuilder.SetInnerText(innerText);
return new MvcHtmlString(tagBuilder.ToString(TagRenderMode.Normal));
}
答案 1 :(得分:3)
我已经使用lambda表达式修改了一些Alexandr代码,以防任何人需要lambda表达式。
用法:
@Html.LabelFor(model => model.Property , new { @class = "bigFont" })
代码:
public static MvcHtmlString LabelFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression, Object htmlAttributes)
{
var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
var innerText = metadata.DisplayName ?? metadata.PropertyName;
if (String.IsNullOrEmpty(innerText))
{
return MvcHtmlString.Empty;
}
var tagBuilder = new TagBuilder("label");
tagBuilder.Attributes.Add("for", TagBuilder.CreateSanitizedId(htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(metadata.PropertyName)));
tagBuilder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
tagBuilder.SetInnerText(innerText);
return new MvcHtmlString(tagBuilder.ToString(TagRenderMode.Normal));
}
答案 2 :(得分:2)
我建议您创建自己的HtmlHelper扩展方法,并使用TagBuilder创建标签。
public static HtmlHelperExtensions
{
public static Label( this HtmlHelper helper, string labelText, object properties )
{
var builder = new TagBuilder("label");
builder.MergeAttributes( new RouteValueDictionary( properties ) );
builder.SetInnerText( labelText );
return builder.ToString( TagRenderMode.Normal );
}
}
有关如何创建强类型标签助手的想法,请参阅MVC source code。请注意,您需要将包含扩展名的命名空间添加到页面或web.config才能使用它。