MVC Html.TextBox (не для) стиль проверки на стороне клиента

У меня возникают проблемы с эстетикой и согласованностью, когда дело доходит до ошибок проверки на стороне клиента в определенном представлении. Представление состоит из нескольких (дочерних) частичных представлений и в основном представляет собой форму, использующую Html.Textbox() и Html.TextBoxFor() MVC/Razor во многих местах. В некоторых частичных представлениях мне нужно, чтобы входные данные не были строго типизированы, следовательно, только TextBox(), и в этих случаях проверка не будет запускать стилизацию полей ввода на стороне клиента.

Я знаю, что ModelState недействителен, и Html.ValidationSummary() показывает правильные сообщения об ошибках из ошибок проверки, вызванных как TextBox(), так и TextBoxFor(). Однако только TextBoxFor() получает класс: "input-validation-error"

Вопрос: Как включить красный индикатор TextBox() при возникновении ошибки? (Проще говоря). Я полагаю, что отсутствует значение или атрибут, по которому срабатывает проверка JQuery.

Код:

Работы: @Html.TextBoxFor(x => x.Owner, new { @class = "form-control" })

Не: @Html.TextBox(name, Model.Name, new { @class = "form-control" })

Вывод в формате HTML

Работы: <input class="input-validation-error form-control" data-val="true" data-val-required="Input is required." id="Owner" name="Owner" type="text" value="">

Не: <input class="form-control" id="Applicants_1__Name" name="Applicants[1].Name" type="text" value="">


person skepnaden    schedule 05.02.2015    source источник
comment
Вы пытались добавить свойства data-val в код TextBox, например. @Html.TextBox(name, Model.Name, new { @class = form-control, data-val=true, data-val-required=Требуется ввод})   -  person Whiplash450    schedule 05.02.2015
comment
Да, за исключением того, что data-val=true, с дефисом, приводит к невозможности разрешения символа, но data_val=true, data_val_required=Input required также не будет работать.   -  person skepnaden    schedule 05.02.2015
comment
Атрибуты data-val-* добавляются помощниками html путем чтения ModelMetadata свойства. Поскольку значение name не является свойством вашей модели, читать нечего, поэтому они не будут добавлены! Используйте хелперы строгого типа (и если вы думаете, что не можете, значит, вы делаете это неправильно)   -  person    schedule 06.02.2015
comment
Эх, тогда бы я не задавал этот вопрос, не так ли? Я взвесил время, которое потребуется, чтобы изменить их все, потому что их довольно много. Таким образом, нет никакого способа добавить атрибуты вручную к TextBox()? Из любопытства, как будет выглядеть эквивалент TextBoxFor() в моем (см. выше) случае?   -  person skepnaden    schedule 06.02.2015
comment
Это просто @Html.TextBoxFor(m => m.Name), но я подозреваю, что это не настоящая проблема, поскольку похоже, что у вас есть коллекция, в этом случае это for(int i = 0; i < Model.Applicants.Count; i++) { @Html.TextBoxFor(m => m.Applicants[i].Name) @Html.ValidationMessageFor(m => m.Applicants[i].Name) }. И вы не можете использовать партиал для рендеринга коллекции (по крайней мере, без дополнительных надстроек) — используйте пользовательский EditorTemplate вместо Applicants, если вы не хотите использовать цикл for.   -  person    schedule 07.02.2015


Ответы (1)


Лично я бы просто сделал проверку в jquery, а затем вы можете настроить все, что вам нужно.

затем вы можете легко установить красный цвет css текстового поля ввода;

$("#myInput").css("border", "1px solid red");

и сбросьте его с помощью

$("#myInput").css("border", "none")
person Whiplash450    schedule 05.02.2015
comment
У меня уже есть форма с более чем 20 входными данными, которые отлично проверяют серверную часть, и все сообщения об ошибках проходят. TextBoxFor() получает стиль, а остальные нет. Просто нужно знать существенную разницу при объявлении двух, которые каким-то образом отключают запуск стилей на стороне клиента. - person skepnaden; 05.02.2015
comment
Ok. Просто из интереса, по какой причине вы должны использовать TextBox вместо TextBoxFor..? - person Whiplash450; 05.02.2015
comment
Он не может быть строго типизирован, потому что к нему привязан уникальный идентификатор. Мне нужно разделить несколько дочерних элементов/объектов с одинаковым типом входных данных, поэтому имя var в приведенном выше коде отображает: id=Applicants_1__Name name=Applicants[1].Name - person skepnaden; 05.02.2015