2010-01-15 45 views

回答

20

我創造了我的項目這個網站助手:

public static class MyLabelExtensions 
{ 
    public static MvcHtmlString Label(this HtmlHelper htmlHelper, string forName, string labelText) 
    { 
     return Label(htmlHelper, forName, labelText, (object) null); 
    } 

    public static MvcHtmlString Label(this HtmlHelper htmlHelper, string forName, string labelText, 
             object htmlAttributes) 
    { 
     return Label(htmlHelper, forName, labelText, new RouteValueDictionary(htmlAttributes)); 
    } 
    public static MvcHtmlString Label(this HtmlHelper htmlHelper, string forName, string labelText, 
             IDictionary<string, object> htmlAttributes) 
    { 
     var tagBuilder = new TagBuilder("label"); 
     tagBuilder.MergeAttributes(htmlAttributes); 
     tagBuilder.MergeAttribute("for", forName.Replace(".", tagBuilder.IdAttributeDotReplacement), true); 
     tagBuilder.SetInnerText(labelText); 
     return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal)); 
    } 

    public static MvcHtmlString LabelFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, 
                  Expression<Func<TModel, TProperty>> expression, 
                  string labelText) 
    { 
     return LabelFor(htmlHelper, expression, labelText, (object) null); 
    } 
    public static MvcHtmlString LabelFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, 
                  Expression<Func<TModel, TProperty>> expression, 
                  string labelText, object htmlAttributes) 
    { 
     return LabelFor(htmlHelper, expression, labelText, new RouteValueDictionary(htmlAttributes)); 
    } 
    public static MvcHtmlString LabelFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, 
                  Expression<Func<TModel, TProperty>> expression, 
                  string labelText, 
                  IDictionary<string, object> htmlAttributes) 
    { 
     string inputName = ExpressionHelper.GetExpressionText(expression); 
     return htmlHelper.Label(inputName, labelText, htmlAttributes); 
    } 
} 

我使用它們以 「強類型」 的資源:

<%= Html.LabelFor(m=>m.NickName, UserStrings.NickName) %> 

希望幫助...

+1

我剛剛遇到了這個代碼,並在我的項目中實現了它。但是,在構建HtmlHelper時,我確實得到了一些奇怪的「不一致的可訪問性」消息。我通過將「this HtmlHelper」的每個實例都替換爲「this System.Web.Mvc.HtmlHelper」來解決此問題。希望能幫助其他任何發現這一點的人。 – 2010-10-23 14:30:14

1

爲什麼不創建自己的Html Helper?

public static class MVCHelpers 
{ 
    public static string CustomLabelFor(this HtmlHelper helper, string ...) 

    { 
     return "<label ... </label>" 
    } 
} 
+0

這將是我的最後一招,確保我不會錯過任何東西。看起來很奇怪,我發現自定義文本的唯一方法是使用DisplayNameAttribute。 – 2010-01-18 15:13:39

1

我發現這非常有用。我認爲這是從MVC 2缺少的東西。或者至少我還沒有找到一種方法來建立它。

最簡單的情況下,需要這個功能。我有兩個對象聯繫人和地址。 A聯繫人可以有多個Addesses

地址

  • ID
  • 國家

聯繫

  • ID
  • 總線地址ID
  • 首頁地址ID

現在對於其編輯或顯示聯繫人,能夠改變DisplayNameAttribute上的地址「街」屬性不是非常有幫助,因爲我真的想要一個形式一個領域是'商業街',另一個領域是'Home Street'。

+0

我同意。我認爲應該有一種方法來覆蓋。 – 2010-03-23 22:21:13

+1

-1:不是答案 – xr280xr 2014-05-19 20:15:08

14

MVC3 RC中有一個新的LabelFor重載,允許您指定labelText。

+1

是的,我看到了,很高興他們加了這個! – 2010-11-15 16:39:51