我有LabelFor
過載,可以這樣使用:如何延長/覆蓋MVC html.LabelFor
@Html.LabelFor(i => i.MyProperty)
我怎樣才能讓編譯器使用我的過載,而不是通過MVC OOTB提供的一?
基本上這只是讓我可以有必需的字段標籤與*後綴
我有LabelFor
過載,可以這樣使用:如何延長/覆蓋MVC html.LabelFor
@Html.LabelFor(i => i.MyProperty)
我怎樣才能讓編譯器使用我的過載,而不是通過MVC OOTB提供的一?
基本上這只是讓我可以有必需的字段標籤與*後綴
吐出對於超載,你不能(合理的)。
僅舉Label()
或MyLabelFor()
等
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);
您的LabelFor應該會導致運行時綁定異常,因爲無法在內置的MVC和您的擴展方法之間進行解析。您需要從web.config中的擴展部分中刪除內置命名空間中的MVC,這將成爲一個極端的痛點。這就是爲什麼我說你無法合理創造這種超載。 –