如何扩展/覆盖mvc html.LabelFor

时间:2011-07-20 17:23:39

标签: asp.net asp.net-mvc-3

我有LabelFor的重载,可以像这样使用:

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

如何让编译器使用我的重载而不是MVC ootb提供的重载?

基本上这只是为了让我可以通过* suffix

将所需的字段标签吐出来

2 个答案:

答案 0 :(得分:4)

对于那种超载,你不能(合理地)。

只需将方法命名为Label()MyLabelFor()等。

答案 1 :(得分: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);