title: ASPNET MVC - Override Html.TextBoxFor(model.property) with a new helper with same signature?
body: <p>I want to override Html.TextBoxFor() with my own helper that has the exact same signature (but a different namespace of course) - is this possible, and if so, how?</p>
  
  <p>The reason for this is that I have 100+ views in an already existing app, and I want to change the behaviour of TextBoxFor so that it outputs a maxLength=n attribute if the property has a [StringLength(n)] annotation.</p>
  
  <p>The code for automatically outputting maxlength=n is in this question: <a href="https://stackoverflow.com/questions/2386365/maxlength-attribute-of-a-text-box-from-the-dataannotations-stringlength-in-mvc2">maxlength attribute of a text box from the DataAnnotations StringLength in Asp.Net MVC</a>.  But my question is not a duplicate - I am trying creating a more generic solution: where the DataAnnotaion flows into the html automatically without any need for additional code by the person writing the view.</p>
  
  <p>In the referenced question, you have to change every single Html.TexBoxFor to a Html.CustomTextBoxFor.  I need to do it so that the existing TextBoxFor()'s do not need to be changed - hence creating a helper with the same signature: change the behaviour of the helper method, and all existing instances will just work without any changes (100+ views, at least 500 TextBoxFor()s - don't want to manually edit that). </p>
  
  <p>I tried this code: (And I need to repeat it for each overload of TextBoxFor, but once the root problem is solved, that will be trivial)</p>
  
  <pre><code>namespace My.Helpers
  {
      public static class CustomTextBoxHelper
      {
          public static MvcHtmlString TextBoxFor&lt;TModel, TProperty&gt;(this HtmlHelper&lt;TModel&gt; htmlHelper, Expression&lt;Func&lt;TModel, TProperty&gt;&gt; expression, object htmlAttributes, bool includeLengthIfAnnotated)
          {
                  // implementation here
          }
      }
  }
  </code></pre>
  
  <p>But I am getting a compiler error in the view on Html.TextBoxFor(): "The call is ambiguous between the following methods or properties" (of course).  Is there any way to do this?</p>
  
  <p>Is there an alternative approach that would allow me to change the behaviour of Html.TextBoxFor, so that the views that already use it do not need to be changed?</p>