68 votes

.NET MVC - Comment assigner une classe à Html.LabelFor?

Ce code

 <%= Html.LabelFor(model => model.Name) %>
 

produit cette

 <label for="Name">Name</label>
 

Mais je veux ça

 <label for="Name" class="myLabel">Name</label>
 

Comment tu fais ça?

131voto

Chris and Kasun Points 709

Malheureusement, dans MVC 3 le Html.LabelFor() la méthode n'a pas de signatures de méthode qui permettent directement de la déclaration de classe. Cependant, MVC 4 ajoute 2 surcharges qui acceptent une htmlAttributes objet anonyme.

Comme avec tous les HtmlHelpers il est important de se rappeler que le compilateur C# voit class réservés mot.

Donc, si vous utilisez le @ avant de l'attribut de classe, il contourne le problème, c'est à dire:

@Html.LabelFor(model => model.PhysicalPostcode, new { @class= "SmallInput" })

Le symbole @ fait de la "classe" d'un littéral qui est passé à travers.

65voto

Vladimir Shmidt Points 1149

Surcharge de LabelFor:

 public static class NewLabelExtensions
{
    public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object htmlAttributes)
    {
        return LabelFor(html, expression, new RouteValueDictionary(htmlAttributes));
    }
    public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, IDictionary<string, object> htmlAttributes)
    {
        ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
        string htmlFieldName = 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.MergeAttributes(htmlAttributes);
        tag.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName));
        tag.SetInnerText(labelText);
        return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal));
    }
}
 

http://weblogs.asp.net/imranbaloch/archive/2010/07/03/asp-net-mvc-labelfor-helper-with-htmlattributes.aspx

8voto

Richard Nienaber Points 5049

D'accord, en regardant la source (System.Web.Mvc.Html.LabelExtensions.cs) pour cette méthode, il ne semble pas y avoir de moyen de faire cela avec un HtmlHelper dans ASP.NET MVC 2. Je pense que votre meilleur pari est de créer votre propre HtmlHelper ou de procéder comme suit pour cette étiquette spécifique:

 <label for="Name" class="myLabel"><%= Model.Name %></label>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X