儘量避免使用ViewBag/ViewData用於將數據發送到您的視圖。根據驗證需要,使用強類型視圖& ViewModels以及數據註釋。
public class CreateIssueVM
{
[Required]
public string Name { set;get;}
public List<SelectListItem> Priorities { get; set; }
[Required]
public int SelectedPriority { set;get;}
}
這裏我有Required
屬性裝飾Name
和SelectedPriority
性能。這意味着,用戶需要輸入這些信息,否則,它會彈出表單提交驗證消息。
在您的GET
操作中,設置集合屬性值並將其發送給視圖。
public ActionResult Create()
{
var vm=new CreateIssueVM();
vm.Priorities =GetPriorities();
return View(vm);
}
假設GetPriorities
方法返回SelectListItem
的優先事項的集合。
public List<SelectListItem> GetPriorities()
{
List<SelectListItem> prioList=new List<SelectListItem>();
prioList.Add(new SelectListItem { Text = "High", Value = "1" });
prioList.Add(new SelectListItem { Text = "Low", Value = "2" });
// to do :read from db and add to list instead of hardcoding
return prioList;
}
現在,在我們看來,這是強類型到CreateIssueVM
@model CreateIssueVM
@using(Html.BeginForm())
{
@Html.DropDownListFor(x=>x.SelectedPriority,
new SelectList(Model.Priorities ,"Value","Text"),"select")
@Html.ValidationMessageFor(x=>x.SelectedPriority)
<input type="submit" />
}
當您提交表單,您可以檢查的形式是合法還是不通過檢查ModelState.IsValid
財產。
[HttpPost]
public ActionResult Create(CreateIssueVM model)
{
if(ModelState.IsValid)
{
// save and redirect
}
vm.Priorities =GetPriorities();
return View(vm);
}
如果你想實現客戶端驗證,以及,你可以簡單地在視圖中包括相關的jQuery不顯眼的驗證腳本,使web.config中的客戶端驗證。