Aquí es un ayudante que debe hacer lo que tiene:
public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string id)
{
ModelMetadata meta = ModelMetadata.FromLambdaExpression(expression, html.ViewData),
string ExpressionHelper.GetExpressionText(expression)
string labelText = metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last();
if (String.IsNullOrEmpty(labelText)) {
return MvcHtmlString.Empty;
}
TagBuilder tag = new TagBuilder("label");
tag.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName));
tag.MergeAttribute("id", id);
tag.SetInnerText(labelText);
return tag.ToMvcHtmlString(TagRenderMode.Normal);
}
una simple modificación del ayudante LabelFor en la fuente asp.net mvc.
en realidad, no creo que LabelFor añade una identificación en todo - el id presumiblemente se aplicaría a el campo de entrada que está asociado con la etiqueta. Sin embargo, creo que tienes razón en que necesitas usar la versión no fuertemente tipada para agregar atributos HTML. – tvanfosson