1

我需要更改id模型的属性,所以我要id在方法中分配一个新的TextBoxForfrom HTML helper。但这显然并没有改变使用方法from时id的属性。forLabelForHTML helper

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

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

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

也许有一个属性可以改变id模型属性。

谢谢

编辑评论

我使用LabelFor是因为我需要从以下名称中获取名称DataAnnotation Description

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

2 回答 2

5

视图模型:

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

看法:

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

浏览器:
<label for="IdSportingLisbon" >里斯本竞技</label>

说明:在 LabelFor 上
设置不同的 for属性。


没有新的 { @for = "IdSportingLisbon" }
浏览器:
<label for="SportingLisbonList" >Sporting Lisbon</label>


网络配置:
<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" />


于 2014-07-31T14:09:22.123 回答
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();
}
于 2012-08-01T13:10:42.847 回答