2010-03-04 2 views
2

Ну, это должно быть легко, но ...Как проверить, что элемент выпадающий список был выбран

У меня есть выпадающий список, на мой взгляд:

<%= Html.DropDownList("ddlDistricts", 
Model.clients.DistrictList,"-- select district --", 
new { @class = "ddltext", style="width: 200px", onchange = "this.form.submit();" }) %> 

Model.clients.DistrictList имеет тип SelectList.

Что я хочу сделать, это убедиться, что пользователь что-то выбрал (т. Е. «--- select district--», который имеет значение «», не выбран).

Так в контроллере у меня есть:

[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»] Value. null, поэтому он не может применять ModelState ["ddlDistricts"]. Value.AttemptedValue как значение раскрывающегося списка.

Согласно тому, что я прочитал, в попытке поставить значение в поле, когда ModelState.IsValid является ложным, он пытается обеспечить значение для управления с ошибкой в ​​следующем порядке:

(1) ModelState [ "имя_поля"]. Value.AttemptedValue

(2) Явное при условии, значение в управлении

(3) ViewData

так что применение ModelState, но свойство Value равно нулю, поэтому пытается доступ к генератору AttemptedValue исключение.

Каков ответ на этот вопрос? Как вы можете проверить, чтобы законный элемент был выбран из DropDownList?

Я уверен, что это легко, но я не могу это сделать, используя схему обработки ошибок ModelState.

ответ

2
ModelState.AddModelError("ddlDistrict", "Please select a district"); 
ModelState.SetModelValue("ddlDistrict", ValueProvider["ddlDistrict"]); 
+0

Ах, ха! Это выглядит обнадеживающим. Мне придется подождать до пятницы, когда я вернусь к работе, чтобы попробовать. Я видел SetModelValue здесь и там, но не нашел действительно хорошего объяснения. – Cynthia

1

Вы выпадающий назвали «ddlDistricts» (множественное число) в поле зрения, но ссылка «ddlDistrict» в вашем коде. (Если это не опечатка в вашем тексте вопроса ...)

+0

О да, это просто опечатка .. код правильный. :) – Cynthia

Смежные вопросы