有触发客户端验证通过DropDownListFor创建的选择列表的方法吗?由助手创建的选择列表似乎没有获得文本输入获得的用于客户端验证的“data-val”或“data-val-required”属性。ASP.net MVC3 DropDownListFor INT要求DataAnnotation
验证并在服务器侧出现当我检查ModelState.IsValid,然后对后续页面加载显示的验证消息。
我就行了,因为我希望用户必须选择一个选项(而不是让它在列表中选择第一项)中设置的默认选项“请选择...”。
我的视图模型:
public partial class ProvinceVM
{
[Required]
[Range(1, int.MaxValue)]
public int CountryId { get; set; }
[Required]
[StringLength(16)]
public string Abbreviation { get; set; }
[Required]
[StringLength(64)]
public string Name { get; set; }
}
在查看代码:
<div class="editor-label">
@Html.LabelFor(model => model.CountryId, "Country")
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.CountryId, (IEnumerable<SelectListItem>)ViewBag.CountryId, "Please Select...")
@Html.ValidationMessageFor(model => model.CountryId)
</div>
我的控制器代码:
[HttpPost]
public ActionResult Create(ProvinceEditVM provinceVM)
{
if (ModelState.IsValid)
{
var province = new Province() { CountryId = provinceVM.CountryId.Value, Abbreviation = provinceVM.Abbreviation, Name = provinceVM.Name };
_repo.Add<Province>(province);
_repo.SaveChanges();
return RedirectToAction("index");
}
ViewBag.CountryId = new SelectList(_repo.GetQuery<Country>().OrderBy(x => x.Name), "CountryId", "Name", provinceVM.CountryId);
return View(provinceVM);
}
事情我已经尝试:
- 使视图模型的CountryId属性可空INT(INT?)
- 拆除范围属性为CountryId财产
- 重命名ViewBag.CountryId别的东西(如果存在与视图模型的属性名有些冲突)
我可以很容易地使用jQuery创建所需的值,但我想确保我不会忽略已经内置的东西;特别是因为更进一步,我想添加本地化的文化错误消息。
感谢您指出了这一点。 – Sam 2011-12-18 07:27:04