2011-05-07 85 views
13

我希望有人有一些想法。我想清理我的代碼,所以我已經使用了Html.LabelFor。但是現在我想爲標籤分配一個CSS類。我可以向MVC3中的Html.LabelFor添加CSS類定義嗎?

Html.LabelFor(model => model.Customer.Description ????) 

有沒有人知道這是否可能在MVC3。請注意,它是我正在使用的MVC3。我已經看到一篇關於MVC2的文章,並沒有簡單的解決方案。

回答

9

在MVC 3中沒有內置的方法來實現這一點。你將不得不編寫你的幫手來做到這一點。看看LabelExtensions課程,看看它是如何完成的。

+1

感謝。只是想確認一下,MVC3中沒有什麼新東西。我想知道他們爲什麼不給Html.Label多一點靈活性。我想我不是唯一想做這件事的人。 – JudyJ 2011-05-07 16:05:34

+5

@LeeGarner好吧,我在MVC團隊,我不知道爲什麼標籤助手不採用'htmlAttributes'參數。也許有些疏忽。我將提交一個錯誤以確保我們將其添加到下一個版本中。 – marcind 2011-05-07 16:11:32

+0

@marcind當你在它的時候,你能不內部的助手,即。在LabelExtensions中,LabelHelper是內部的,所以我們不能在滾動我們自己的幫助器擴展時使用它。 – 2011-07-17 05:05:34

15

在這裏你去哥們-O:

namespace System.Web.Mvc.Html 
{ 
    using System; 
    using Collections.Generic; 
    using Linq; 
    using Linq.Expressions; 
    using Mvc; 

    public static class LabelExtensions 
    { 
    public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object htmlAttributes) 
    { 
     return html.LabelFor(expression, null, htmlAttributes); 
    } 

    public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string labelText, object htmlAttributes) 
    { 
     return html.LabelHelper(
      ModelMetadata.FromLambdaExpression(expression, html.ViewData), 
      ExpressionHelper.GetExpressionText(expression), 
      HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes), 
      labelText); 
    } 

    private static MvcHtmlString LabelHelper(this HtmlHelper html, ModelMetadata metadata, string htmlFieldName, IDictionary<string, object> htmlAttributes, string labelText = null) 
    { 
     var str = labelText 
      ?? (metadata.DisplayName 
      ?? (metadata.PropertyName 
      ?? htmlFieldName.Split(new[] { '.' }).Last())); 

     if (string.IsNullOrEmpty(str)) 
     return MvcHtmlString.Empty; 

     var tagBuilder = new TagBuilder("label"); 
     tagBuilder.MergeAttributes(htmlAttributes); 
     tagBuilder.Attributes.Add("for", TagBuilder.CreateSanitizedId(html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName))); 
     tagBuilder.SetInnerText(str); 

     return tagBuilder.ToMvcHtmlString(TagRenderMode.Normal); 
    } 

    private static MvcHtmlString ToMvcHtmlString(this TagBuilder tagBuilder, TagRenderMode renderMode) 
    { 
     return new MvcHtmlString(tagBuilder.ToString(renderMode)); 
    } 
    } 
} 
相關問題