客户端验证不适用于下拉列表

时间:2015-11-23 06:48:22

标签: asp.net-mvc asp.net-mvc-4

查看

@Html.DropDownListFor(m => m.InsertCustomer.CountryID, Model.lstCountry, new { @class = "DropDownListFor" })
@Html.ValidationMessageFor(m =>m.InsertCustomer.CountryID)

查看模型

[Required(ErrorMessage = "Please Select Country")]
public string CountryID { get; set; }

为下拉列表创建列表的方法

public IEnumerable<SelectListItem> getCountry()
{
     DNC_DAL.clsCustomerMaster _objDalUser = new DNC_DAL.clsCustomerMaster();
     DataTable dtCountry = new DataTable();
     dtCountry = _objDalUser.GetCountry();
     List<SelectListItem> lstCountry = new List<SelectListItem>();
     SelectListItem firstOption = new SelectListItem() { Text = "---Select One---" };
     lstCountry.Add(firstOption);


     foreach (DataRow drCountry in dtCountry.Rows)
     {
         SelectListItem Country = new SelectListItem() { Text = drCountry["DCM_DESC"].ToString(), Value = drCountry["DCM_ID"].ToString() };
         lstCountry.Add(Country);
     }

     return lstCountry;
}

控制器

public ActionResult wfrmCustomerMaster()
{
     Models.clsCustomerMaster CustomerModel = new Models.clsCustomerMaster();
     IEnumerable<SelectListItem> strCountry = null;
     strCountry = CustomerModel.getCountry();
     CustomerModel.lstCountry = strCountry;

     return View(CustomerModel);
}

除了下拉验证之外,所有其他验证(未在问题中发布)在页面上完美运行,我想知道为什么?

1 个答案:

答案 0 :(得分:3)

您的代码正在添加第一个选项

<option>---Select One---</option>

没有value=""属性,这意味着如果您选择它,<select>元素的值将为"---Select One---",这是有效的(即它不是{{1} }或空null)。

相反,要生成具有string值的标签选项,请使用接受null的{​​{3}},这将生成第一个选项

optionLabel

并删除生成此选项的<option value="">---Select One---</option> 中的代码