嗯,这一定很容易,但是......
我的视图中有一个下拉列表:
<%= 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错误处理方案。
答案 0 :(得分:2)
ModelState.AddModelError("ddlDistrict", "Please select a district");
ModelState.SetModelValue("ddlDistrict", ValueProvider["ddlDistrict"]);
答案 1 :(得分:1)
您在视图中有一个名为“ddlDistricts”(复数)的下拉列表,但在您的代码中引用了“ddlDistrict”。 (除非它只是你问题文本中的拼写错误...)