Я хочу переопределить Html.TextBoxFor () моим собственным помощником, который имеет точно такую же сигнатуру (но, конечно, другое пространство имен) - возможно ли это, и если да, то как?
Причина этого в том, что у меня более 100 представлений в уже существующем приложении, и я хочу изменить поведение TextBoxFor, чтобы он выводил атрибут maxLength = n, если свойство имеет аннотацию [StringLength (n)] .
Код для автоматического вывода maxlength = n в этом вопросе: атрибут maxlength текстового поля из DataAnnotations StringLength в Asp.Net MVC . Но мой вопрос не является дубликатом - я пытаюсь создать более общее решение: когда DataAnnotaion автоматически попадает в html без необходимости в дополнительном коде лицом, пишущим представление.
В указанном вопросе вы должны изменить каждый отдельный Html.TexBoxFor на Html.CustomTextBoxFor. Мне нужно сделать так, чтобы существующие TextBoxFor () не нуждались в изменении - следовательно, создается помощник с той же сигнатурой: измените поведение вспомогательного метода, и все существующие экземпляры будут просто работать без каких-либо изменений (100 + просмотров, не менее 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
}
}
}
Но я получаю ошибку компилятора в представлении Html.TextBoxFor (): «Вызов неоднозначен между следующими методами или свойствами» (конечно). Есть ли способ сделать это?
Есть ли альтернативный подход, который позволил бы мне изменить поведение Html.TextBoxFor, чтобы не нужно было изменять представления, которые уже используют его?