ModelState是Controller的一个属性,可以被继承自System.Web.Mvc.Controller的那些类访问。它表示在一次POST提交中被提交到服务器的 键值对集合,每个记录到ModelState内的值都有一个错误信息集。尽管ModelState的名字中含有“Model”,但它只有名称、值和错误集,与任何Model类都没有关系。
》》 ModelState有两个作用:
1:存储提交到服务器的值,
2:存储与之相关联的验证错误集。
ModelState 中错误集合,是记录 Model中特性标识,Require、StringLength、EmailAddress等
public class XXXModel
{
[Required(ErrorMessage = "Please enter the user's first name.")]
[StringLength(50, ErrorMessage = "The First Name must be less than {1} characters.")]
[Display(Name = "First Name:")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Please enter the user's last name.")]
[StringLength(50, ErrorMessage = "The Last Name must be less than {1} characters.")]
[Display(Name = "Last Name:")]
public string LastName { get; set; }
[EmailAddress(ErrorMessage = "The Email Address is not valid")]
[Required(ErrorMessage = "Please enter an email address.")]
[Display(Name = "Email Address:")]
public string EmailAddress { get; set; }
}
同时要在csHTML 中 @Html.ValidationMessageFor()
》》请注意我们现在使用的两个帮助信息控件 ValidationSummary 和 ValidationMessageFor。
》》ValidationMessageFor则只显示其指定属性的错误信息摘要。
》》ValidationSummary控件将会读取模型中所有属性的错误信息摘要并显示在一个项目符号列表中;
@model ModelStateDemo.ViewModels.Home.xxxModel
<h2>Add</h2>
@using(Html.BeginForm())
{
@Html.ValidationSummary()
<div>
<div>
@Html.LabelFor(x => x.FirstName)
@Html.TextBoxFor(x => x.FirstName)
@Html.ValidationMessageFor(x => x.FirstName)
</div>
<div>
@Html.LabelFor(x => x.LastName)
@Html.TextBoxFor(x => x.LastName)
@Html.ValidationMessageFor(x => x.LastName)
</div>
<div>
@Html.LabelFor(x => x.EmailAddress)
@Html.TextBoxFor(x => x.EmailAddress)
@Html.ValidationMessageFor(x => x.EmailAddress)
</div>
<div>
<input type="submit" value="Save" />
</div>
</div>
}
ModelState 自定义错误
[HttpPost]
public ActionResult Add(AddUserVM model)
{
if(model.FirstName == model.LastName)
{
ModelState.AddModelError("LastName", "The last name cannot be the same as the first name.");
}
if(!ModelState.IsValid)
{
return View(model);
}
return RedirectToAction("Index");
}