我需要更改模型的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; }
答案 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();
}