2010-04-13 6 views

Respuesta

0

Los métodos LabelFor, TextBoxFor, XXXFor agregan automáticamente el ID según el nombre de la propiedad. No creo que puedas anular eso. Si desea poder establecer la identificación, necesitará usar los métodos "no para" como Html.TextBox.

+0

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

0

¿Qué hay de este método de extensión

public static class LabelExtensions 

    { 
     public static string Label(this HtmlHelper helper, string target, string id, string text) 
     { 
      return String.Format("<label for='{0}' id='{1}'>{2}</label>", target,id, text); 
     } 
    } 

Edición

creo que la mejor forma sería la de utilizar el TagBuilder similar a this example y utilizar la función MergeAttribute para incluir el id.

4

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.

0

Quizás el comportamiento ha cambiado desde MVC2 porque, aunque estoy usando Razor y VB.NET, obtuve este código para que funcione, y debería ser lo mismo con la posible excepción del @ que puso antes de id (ahora estoy usando MVC4):

@Html.LabelFor(Function(model) model.ItemNumber, New With {.id = "ItemNumberL"}) 

Esto genera el código HTML siguiente:

<label for="ItemNumber" id="ItemNumberL">ItemNumber</label> 
Cuestiones relacionadas