尽量避免使用ViewBag / ViewData将数据发送到您的视图。根据验证的需要,使用带有数据注释的强类型视图和 ViewModel。
public class CreateIssueVM
{
[Required]
public string Name { set;get;}
public List<SelectListItem> Priorities { get; set; }
[Required]
public int SelectedPriority { set;get;}
}
在这里,我用属性装饰了Name
and属性。也就是说,用户需要输入这些,否则会弹出表单提交的验证信息。SelectedPriority
Required
在您的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 中启用客户端验证。