2010-03-04 59 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

相关问题