ASPNET MVC - 使用具有相同签名的新助手覆盖Html.TextBoxFor(model.property)?

JK.*_*JK. 7 c# asp.net-mvc html-helper data-annotations

我想用我自己的帮助器覆盖Html.TextBoxFor(),它有完全相同的签名(当然是一个不同的命名空间) - 这是可能的,如果是的话,怎么样?

这样做的原因是我在现有应用程序中有100多个视图,我想改变TextBoxFor的行为,以便在属性具有[StringLength(n)]注释时输出maxLength = n属性.

自动输出maxlength = n的代码在这个问题中:来自Asp.Net MVC中DataAnnotations StringLength的文本框的maxlength属性.但我的问题并不重复 - 我正在尝试创建一个更通用的解决方案:DataAnnotaion自动流入html,而不需要编写视图的人员需要额外的代码.

在引用的问题中,您必须将每个Html.TexBoxFor更改为Html.CustomTextBoxFor.我需要这样做,以便不需要更改现有的TextBoxFor() - 因此创建一个具有相同签名的帮助程序:更改帮助程序方法的行为,并且所有现有实例将在没有任何更改的情况下正常工作(100 + views,至少500 TextBoxFor()s - 不想手动编辑它).

我试过这段代码:(并且我需要为TextBoxFor的每次重载重复它,但是一旦根问题解决了,那将是微不足道的)

namespace My.Helpers
{
    public static class CustomTextBoxHelper
    {
        public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes, bool includeLengthIfAnnotated)
        {
                // implementation here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我在Html.TextBoxFor()视图中遇到编译器错误:"调用在以下方法或属性之间是不明确的"(当然).有没有办法做到这一点?

是否有一种替代方法可以让我改变Html.TextBoxFor的行为,以便不需要更改已经使用它的视图?

svi*_*nto -3

您可以使用编辑器模板和自定义 ModelMetadataProvider 来解决此问题。(很抱歉没有提供更多信息,尽管这在谷歌上很容易找到,我希望这会给你带来正确的方向。)