2011-07-20 48 views
3

我有LabelFor過載,可以這樣使用:如何延長/覆蓋MVC html.LabelFor

@Html.LabelFor(i => i.MyProperty) 

我怎樣才能讓編譯器使用我的過載,而不是通過MVC OOTB提供的一?

基本上這只是讓我可以有必需的字段標籤與*後綴

回答

4

吐出對於超載,你不能(合理的)。

僅舉Label()MyLabelFor()

1

LabelFor接受一個Expression<Func<TModel, TValue>>參數的方法。我可以想象你可以做這樣的事情:

public static string LabelFor<TModel, string>(
    this HtmlHelper<TModel> htmLHelper, 
    Expression<Func<TModel, string>> expression) { 
    // etc 

...讓您的擴展方法重載更具體,但是,這並不意味着你應該,因爲你需要做這樣爲全部屬性類型。

與其將您的方法命名與標準HtmlHelper擴展方法混淆在一起,請用不同的名稱命名,例如,

@Html.MyLabelFor(m => m.MyProperty); 
+3

您的LabelFor應該會導致運行時綁定異常,因爲無法在內置的MVC和您的擴展方法之間進行解析。您需要從web.config中的擴展部分中刪除內置命名空間中的MVC,這將成爲一個極端的痛點。這就是爲什麼我說你無法合理創造這種超載。 –