Проверка MVC с полем автозаполнения - PullRequest
3 голосов
/ 02 апреля 2012

У меня небольшая проблема с проверкой модели.

У меня есть скрытое поле с именем «theID» и текстовое поле с именем «theDesc».Поле theDesc является автозаполнением, и когда я выбираю его, идентификатор получает сохраненный идентификатор.

theID - это поле, которое хранится в базе данных, и это поле «Requiered», поэтому я использую: @Html.ValidationMessage ("theID")

Проблема заключается в том, что ошибка ввода-проверки класса CSS назначена скрытому полю.Я теперь такое поведение, это нормально и ожидаемо, но есть способ изменить это?

что я хочу сделать, это то, что поле theDesc показывает класс ошибки ввода.Таким образом, пользователь может заметить, что отсутствует.

Это не имеет большого значения, но мое OCD сводит меня с ума из-за того, что я не получаю все ошибки в одном стиле.

Ответы [ 2 ]

2 голосов
/ 20 декабря 2012

Хороший вопрос и красиво сформулированный! У меня был точно такой же вопрос, но пока не вижу окончательного ответа. Мне удалось сделать это - по крайней мере с проверкой на стороне сервера - добавив проверку на стороне сервера в контроллере и в представлении, используя помощники HTML вместо пользовательского HTML. Этот пост помог мне:

.input-validation-error для текстового поля при повторном отображении формы с ошибочным значением

Как уже упоминалось в посте, необходимо установить название html, например. поле модели правильно. Поэтому я добавил код проверки на стороне сервера в контроллер. Обратите внимание, что проверенное поле model.theID отличается от имени, добавленного в ModelState "TheDesc":

Код контроллера:

public ActionResult SomeActionIndex(SomeModel model) {
   ...
   if (string.IsNullOrEmpty(model.theID) {
        ModelState.AddModelError("theDesc", "The field is uhm... required!");
   }
   ...
}

Комментарии в посте указывают, что для выделения (красная граница через класс CSS) он помогает использовать стандартные помощники HTML, поскольку они автоматически позволяют использовать проверку jQuery. В моем случае проверенный список автозаполнения изначально НЕ генерировался с использованием помощника HTML, а с использованием некоторого пользовательского HTML во вложенном представлении. Я изменил это.

Просмотр кода:

@Html.TextBoxFor(m => Model.theDesc, new { @class="auto-complete", 
@placeholder="choose a value..." })

@Html.TextBoxFor(m => Model.theID, new { @style = "display: none" })

Примечание. Точно такую ​​разновидность черной магии, которую выполняют помощники HTML, чтобы сделать эту работу, я пока не смог выяснить. Поэтому я оставлю это на потом или для кого-то другого, но я думаю, что этот вопрос относится к этому:

пользовательский htmlhelper с поддержкой проверки

0 голосов
/ 02 апреля 2012

В событии изменения вашего автозаполнения присвойте это значение скрытому полю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...