Ну, это должно быть легко, но ...
У меня есть раскрывающийся список:
<%= Html.DropDownList("ddlDistricts",
Model.clients.DistrictList,"-- select district --",
new { @class = "ddltext", style="width: 200px", onchange = "this.form.submit();" }) %>
Model.clients.DistrictList имеет тип SelectList.
Что я хочу сделать, так это убедиться, что пользователь что-то выбирает (то есть "--- выберите район--", значение которого "" не выбрано).
Так в контроллере у меня есть:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(string date, string month, FormCollection form)
{
if (form["chooseSchool"] == "Submit") // submit button is clicked
{
if (String.IsNullOrEmpty(form["ddlDistrict"]))
{
ModelState.AddModelError("ddlDistrict", "Please select a district");
}
else
{
// store some data somewhere .......
}
}
// create the modelData object .....
return View(modelData);
}
Но что происходит, так это исключение нулевого объекта, когда он пытается повторно отобразить представление, по-видимому, потому что
ModelState ["ddlDistricts"]. Значение равно нулю, поэтому нельзя применить ModelState ["ddlDistricts"]. Value.AttemptedValue в качестве значения раскрывающегося списка.
Согласно тому, что я прочитал, при попытке указать значение для поля, когда ModelState.IsValid имеет значение false, он пытается предоставить значение для элемента управления с ошибкой в следующем порядке:
(1) ModelState ["fieldname"]. Value.AttemptedValue
(2) Явно предоставленное значение в элементе управления
(3) ViewData
Таким образом, он применяет ModelState, но свойство Value имеет значение null, поэтому при попытке доступа к AttemptedValue создается исключение.
Каков ответ на это? Как проверить, что в DropDownList выбран законный элемент?
Я уверен, что это легко, но я не могу сделать это, используя схему обработки ошибок ModelState.