Html.EditorДля добавления .textbox к имени элемента

У меня есть проект, который содержит простую форму для сбора информации о регистрации. Недавно я работал над добавлением локализации в проект, так как весь текст, показываемый пользователю, был жестко запрограммирован. Я не уверен, что изменилось, но по какой-то причине теперь, когда Razor отображает элемент HTML с помощью метода Html.EditorFor, который в конечном итоге становится текстовым полем, к свойству Name элемента добавляется «.textbox».

Это нарушает привязки, поэтому, когда я получаю свою модель, все текстовые значения равны нулю. Вот пример того, что я вижу, код Razor:

<div class="form-group" ng-class="{ 'has-error': validate && accountForm.FirstName.$invalid }">
        @Html.LabelFor(m => m.FirstName, new { @class = @ViewBag.LabelCssRequired })
        <div class="@ViewBag.TextboxCss">
            @Html.EditorFor(m => m.FirstName, new { htmlAttributes = new { ng_model = "firstName" } })
        </div>
    </div>

и вот визуализированный вывод:

<input class="text-box single-line form-control ng-valid-maxlength ng-not-empty ng-dirty ng-valid-parse ng-valid ng-valid-required ng-touched" id="FirstName_textbox" maxlength="100" name="FirstName.textbox" ng-model="firstName" required="required" type="text" value="">

Он также добавляет «_textbox» к идентификатору, но в данный момент меня это не беспокоит. По какой-то причине это происходит только с элементами ввода, у которых тип «текст». У меня есть другой ввод, сгенерированный с помощью .EditorFor, который имеет тип электронной почты и не имеет никаких изменений имени.

Это поведение также, по-видимому, ограничено Html.EditorFor, если я использую.TextboxFor, оно работает нормально.

Мне удалось заставить работать привязки, явно установив свойство @Name в Razor, но это только маскирует симптом, и я хотел бы избежать необходимости делать это для каждого ввода текста на сайте.

Кто-нибудь видел это поведение раньше или знает об исправлении?


person KSF    schedule 13.10.2017    source источник
comment
У тебя случайно нет ничего в project root\views\shared\editortemplates? Я уверен, что этого не должно происходить, и мошеннический шаблон редактора объяснил бы такое поведение.   -  person Balázs    schedule 13.10.2017
comment
@ Балаш, вот оно! Каким-то образом в одном из этих шаблонов текстовое поле, которое получило вывод, имело имя текстового поля, поэтому, похоже, поэтому оно добавляло .textbox. Я не уверен, как это произошло, так как у меня пока не было причин прикасаться к этим файлам. Если вы хотите опубликовать это как ответ, я приму это. Теперь нужно выяснить, как это было добавлено в файл.   -  person KSF    schedule 13.10.2017


Ответы (1)


По умолчанию помощник TextBoxFor генерирует HTML, используя встроенный шаблон. Вы можете переопределить значения по умолчанию, создав файлы в папке project root\views\shared\editortemplates.

Следовательно, проблема может быть вызвана наличием какого-либо пользовательского шаблона. Обычно вам нужно проверять файлы, имя которых соответствует либо типу данных (например, string), либо типу элемента управления (например, TextArea). Если соответствующее свойство модели имеет атрибут UIHint, указанный в нем пользовательский файл также может вступить в игру.

person Balázs    schedule 13.10.2017