2010-03-04 45 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」]值。爲空,所以它不能將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 2010-03-04 07:23:18

1

您在視圖中有一個名爲「ddlDistricts」(複數)的下拉列表,但在您的代碼中引用了「ddlDistrict」。 (除非你的問題文本中只有一個錯字...)

+0

哦,是的,這只是一個錯字。代碼是正確的。 :) – Cynthia 2010-03-04 07:23:43

相關問題