如何验证是否已选择下拉列表项

时间:2010-03-04 06:37:46

标签: c# asp.net-mvc drop-down-menu

嗯,这一定很容易,但是......

我的视图中有一个下拉列表:

<%= 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”]。值为null,因此无法应用ModelState [“ddlDistricts”]。Value.AttemptedValue作为下拉列表的值。

根据我所读到的,在ModelState.IsValid为false时尝试向字段提供值时,它会尝试按以下顺序为控件提供错误值:

(1)ModelState [“fieldname”]。Value.AttemptedValue

(2)在控制中明确提供的值

(3)ViewData

因此它正在应用ModelState,但Value属性为null,因此尝试访问AttemptedValue会生成异常。

这是什么答案?如何检查以确保从DropDownList中选择了合法项?

我确信这很容易,但我似乎无法使用ModelState错误处理方案。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您在视图中有一个名为“ddlDistricts”(复数)的下拉列表,但在您的代码中引用了“ddlDistrict”。 (除非它只是你问题文本中的拼写错误...)