Как проверить, что был выбран элемент раскрывающегося списка - PullRequest
2 голосов
/ 04 марта 2010

Ну, это должно быть легко, но ...

У меня есть раскрывающийся список:

<%= 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.

Ответы [ 2 ]

2 голосов
/ 04 марта 2010
ModelState.AddModelError("ddlDistrict", "Please select a district");
ModelState.SetModelValue("ddlDistrict", ValueProvider["ddlDistrict"]);
1 голос
/ 04 марта 2010

У вас есть выпадающий список с именем "ddlDistricts" (множественное число), но в вашем коде ссылка "ddlDistrict" (Если это не опечатка только в тексте вашего вопроса ...)

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