У меня есть простая форма, которую я хотел бы проверить при отправке формы. Обратите внимание, что я удалил HTML для удобства просмотра
<%=Html.TextBox("LastName", "")%> //Lastname entry
<%=Html.ValidationMessage("LastName")%>
<%=Html.TextBox("FirstName", "")%>//Firstname entry
<%=Html.ValidationMessage("FirstName")%>
<%=Html.DropDownList("JobRole", Model.JobRoleList)%> //Dropdownlist of job roles
<% foreach (var record in Model.Courses) // Checkboxes of different courses for user to select
{ %>
<li><label><input type="checkbox" name="Courses" value="<%=record.CourseName%>" /><%= record.CourseName%></label></li>
<% } %>
При отправке этой формы я хотел бы проверить, заполнены ли и FirstName
, и LastName
(то есть ненулевая длина).
В моем контроллере у меня есть:
public ActionResult Submit(string FirstName, string LastName)
{
if (FirstName.Trim().Length == 0)
ModelState.AddModelError("FirstName", "You must enter a first name");
if (LastName.Trim().Length == 0)
ModelState.AddModelError("LastName", "You must enter a first name");
if (ModelState.IsValid)
{
//Update database + redirect to action
}
return View(); //If ModelState not valid, return to View and show error messages
}
К сожалению, эта логика кода выдает ошибку, которая гласит, что для JobRole
и Courses
.
не найдено никаких объектов.
Если я удаляю выпадающий список и флажки, все работает нормально.
Кажется, проблема в том, что когда я возвращаю View
, представление ожидает объекты для dropwdownlist и флажков (что разумно, поскольку это то, что есть в моем коде представления)
Как мне преодолеть эту проблему?
Вещи, которые я рассмотрел:
- В моем контроллере я мог бы создать объект
JobRoleList
и Course
для передачи в View, чтобы в нем были объекты для рендеринга. Проблема заключается в том, что он перезапишет все выпадающие списки / флажки, которые пользователь уже сделал.
- В параметрах моего метода контроллера
Submit
я мог бы также захватить объект JobRoleList
и Course
, чтобы передать их обратно в View. Снова, не уверен, что это захватит любые элементы, которые пользователь уже выбрал.
Я много гуглил и читал, но не могу найти хорошего ответа. Когда я смотрю на примеры в книгах или онлайн (например, Nerddinner), все примеры валидации включают простые формы с входными данными TextBox и, кажется, не показывают экземпляры с несколькими флажками и выпадающими списками.
Я что-то упустил здесь очевидное? Что будет лучшей практикой в этой ситуации?
Спасибо