ASPNET MVC - HTML переопределения. TextBoxFor (model.property) с новым помощником с той же подписью?

Я хочу переопределить HTML. TextBoxFor () с моим собственным помощником, который имеет ту же самую подпись (но другое пространство имен, конечно) - действительно ли это возможно, и если так, как?

Причина этого состоит в том, что я имею 100 + представления в уже существующем приложении, и я хочу изменить поведение TextBoxFor так, чтобы это произвело атрибут maxLength=n, если свойство имеет [StringLength (n)] аннотация.

Код для того, чтобы автоматически произвести maxlength=n находится в этом вопросе: атрибут maxlength текстового поля от DataAnnotations StringLength у Asp. Сетевой MVC. Но моим вопросом не является дубликат - я пытаюсь создать более универсальное решение: куда DataAnnotaion течет в HTML автоматически без любой потребности в дополнительном коде человека, пишущего представление.

В вопросе, на который ссылаются необходимо изменить каждый HTML. TexBoxFor к HTML. CustomTextBoxFor. Я должен сделать это так, чтобы существующие TextBoxFor () не должны были быть изменены - следовательно создание помощника с той же подписью: измените поведение вспомогательного метода, и все существующие экземпляры будут просто работать без любых изменений (100 + представления, по крайней мере 500 TextBoxFor () s - не хотят вручную редактировать это).

Я попробовал этот код: (И я должен повторить его для каждой перегрузки TextBoxFor, но после того как корневая проблема решена, который будет тривиален),

namespace My.Helpers
{
    public static class CustomTextBoxHelper
    {
        public static MvcHtmlString TextBoxFor(this HtmlHelper htmlHelper, Expression> expression, object htmlAttributes, bool includeLengthIfAnnotated)
        {
                // implementation here
        }
    }
}

Но я получаю ошибку компилятора в представлении о HTML. TextBoxFor (): "Вызов неоднозначен между следующими методами или свойствами" (конечно). Там какой-либо путь состоит в том, чтобы сделать это?

Есть ли альтернативный подход, который позволил бы мне изменять поведение HTML. TextBoxFor, так, чтобы представления, которые уже используют его, не должны были быть изменены?

7
задан Community 23 May 2017 в 12:19
поделиться

2 ответа

Вы можете решить эту проблему. с шаблоном редактора и настраиваемым ModelMetadataProvider. (Извините за то, что не предоставили дополнительную информацию, хотя это вполне можно использовать в Google, и я надеюсь, что это приведет вас в правильном направлении.)

-3
ответ дан 7 December 2019 в 18:41
поделиться

Вы не можете иметь два метода расширения с одинаковым именем и одинаковой сигнатурой одновременно. Вы можете поместить метод расширения в пользовательское пространство имен и использовать это пространство имен вместо стандартного (System.Web.Mvc.Html) в вашем web.config:

<pages>
    <namespaces>
        <!--<add namespace="System.Web.Mvc.Html"/>-->
        <add namespace="YourCompany.Web.Mvc.Html"/>
    </namespaces>
</pages>

но если вы это сделаете, вы потеряете все другие методы расширения, и вам придется переопределить их в вашем пользовательском пространстве имен.

4
ответ дан 7 December 2019 в 18:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: