有觸發客戶端驗證通過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