У меня есть простая форма, которую я хотел бы подтвердить при отправке формы. Обратите внимание, я раздел HTML, для облегчения просмотраОшибка проверки MVC с строго типизированным видом
<%=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
, чтобы передать его обратно в Вид. Опять же, не уверен, что это захватит все элементы, которые пользователь уже выбрал.
Я много сделал для поиска и чтения, но я не могу найти хороший ответ. Когда я смотрю примеры в книгах или в Интернете (например, Nerddinner), все примеры проверки включают простые формы с входами в TextBox и, похоже, не показывают экземпляры с несколькими флажками и dropdownlists.
Я пропустил что-то очевидное здесь? Какая была бы лучшая практика в этой ситуации?
Благодаря
Спасибо. Я принял вашу методологию, и сейчас все работает нормально. Мне кажется, что моя ViewModel немного раздута с данными, которые я могу использовать или не могу использовать, но для того, что я делаю, я не ожидаю, что это вызовет у меня какие-либо проблемы. Спасибо, что нашли время, чтобы посоветовать мне. –
@ Remnant. Как я уже сказал, у вас могут быть отдельные модели (с использованием подкласса, если необходимо) для отображения/публикации, но тогда вам понадобится способ преобразования между ними, когда у вас есть ошибка, а не просто заполнение отсутствующих бит. – tvanfosson