Model
public class People { [Required] public string name { get; set; } [Required] public string phone { get; set; } [Required] public string address { get; set; } }
Web页面
在点击提交按钮的时候进入UpdatePeople方法
[HttpPost] public ActionResult UpdatePeople(FormCollection form) { People people = new People(); if (TryUpdateModel<People>(people)) { //更新数据库操作 } else { //该怎么判断哪些值出错了 //比如说name没有值,是使用var error= ModelState["name"].Errors[0]这样的方式一个个进行判断吗? //如果窗体上值很多,会不会很麻烦 } return View(); }
如上else中注释所示,当if中条件不满足时,else中如何取得错误信息?
参考 How to find the exceptions / errors when TryUpdateModel fails to update model in asp.net mvc 3:
var model = new ViewModel();
var isSuccess = TryUpdateModel(model);
if (!isSuccess)
{
foreach (var modelState in ModelState.Values)
{
foreach (var error in modelState.Errors)
{
Debug.WriteLine(error.ErrorMessage);
}
}
}
既然都是提供的集合,还不能有办法 —— 这就是计算机的特长。
源码已经说明不用写。
class ModelStateDictionary{
public bool IsValid
{
get
{
return this.Values.All<ModelState>((Func<ModelState, bool>) (modelState => modelState.Errors.Count == 0));
}
}
}