在“Html.LabelFor”中更改“for”属性

时间:2012-08-01 12:38:21

标签: c# .net asp.net-mvc razor html-helper

我需要更改模型的id属性,因此我要从id的方法TextBoxFor中分配新的HTML helper。但是,当使用id中的方法for时,这显然不会更改LabelFor属性中的HTML helper

@Html.TextBoxFor(model => model.MyProperty, new { id = "CustomId" })

在使用for中的方法LabelFor时,如何更改HTML helper属性?因为此方法不允许更改属性。

@Html.LabelFor(model => model.MyProperty)

也许有一个属性可以更改模型属性中的id

感谢

修改评论

我使用LabelFor,因为我需要从DataAnnotation Description中取名:

[Display(Name = "Name of my property")]
public string MyProperty { get; set; }

2 个答案:

答案 0 :(得分:3)

视图模型:

public IEnumerable<SportingLisbon> SportingLisbonList { get; set; }

查看:

 @Html.LabelFor(model => model.SportingLisbonList, new { @for = "IdSportingLisbon" })

浏览器:
&lt; label for =“IdSportingLisbon”&gt; Sporting Lisbon&lt; / label&gt;

描述:
在LabelFor上设置不同的 for 属性。


没有 new { @for =“IdSportingLisbon”}
浏览器:
&lt; label for =“SportingLisbonList”&gt; Sporting Lisbon&lt; / label&gt;


的web.config:
<compilation debug="true" targetFramework="4.5" />

<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />


答案 1 :(得分:1)

我认为您需要为此创建自己的扩展程序,我已经创建了一个带有html属性的扩展程序,您可能可以使用它来解决您的问题:

public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, Object htmlAttributes) {
    ModelMetadata metadata = ModelMetadata.FromLambdaExpression<TModel, TValue>(expression, html.ViewData);
    String fieldname = ExpressionHelper.GetExpressionText(expression);

    fieldname = metadata.DisplayName ?? metadata.PropertyName ?? fieldname.Split(new Char[] { '.' }).Last<String>();
    if (String.IsNullOrEmpty(fieldname)) {
        return MvcHtmlString.Empty;
    }
    TagBuilder tagBuilder = new TagBuilder("label");
    tagBuilder.Attributes.Add("for", TagBuilder.CreateSanitizedId(html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(fieldname)));
    tagBuilder.SetInnerText(fieldname);
    RouteValueDictionary attr = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
    tagBuilder.MergeAttributes<String, Object>(attr);
    return tagBuilder.ToMvcHtmlString();
}