首页 > 代码库 > ASP.NET MVC5中的Model验证
ASP.NET MVC5中的Model验证
Model验证是ASP.NET MVC中的重要部分,这篇文章就介绍下ASP.NET MVC中Model验证的几种方式。
- DataAnnotation
- ValidationAttribute
- IValidatableObject
- IDataErrorInfo
DataAnnotation
DataAnnotation翻译过来是“数据注解”的意思,DataAnnotation命名空间中包含一些用于验证Model的特性,如:RequiredAttribute,CompareAttribute,DisplayAttribute等,我们在创建Model时,将相应的特性性标注到字段上即可实现数据验证。
创建Model:
public class Person{ [Display(Name = "姓名")] [Required(ErrorMessage = "姓名是必须的!")] public string Name { set; get; } [Display(Name = "姓名")] public int Age { set; get; }}
View中的代码:
@model EBuy.Website.Models.Person@{ Layout = null;}<!DOCTYPE html><html><head> <meta name="viewport" content="width=device-width" /> <title>Index</title></head><body> <div> <h3 style="color:red;"> @Html.ValidationSummary() </h3> </div> <div> @using (Html.BeginForm("evaluate", "home", "Post")) { @Html.LabelFor(Model => Model.Name) @Html.TextBoxFor(Model => Model.Name) @Html.LabelFor(Model => Model.Age) @Html.TextBoxFor(Model => Model.Age) <input type="submit" value="提交" /> } </div></body></html>
Controller中的代码:
public class HomeController : Controller{ public ActionResult Index() { return View(); } public ActionResult Evaluate(Person person) { if (ModelState.IsValid) { return Content("evaluate success!"); } return View("Index", person); }}
运行程序:
注意,Age属性上并未标注RequiredAttribute,却依然提示Age字段必须,这是因为Age是int类型,int类型不能为null,对于不能为null的类型,ASP.NET MVC默认为是必须的。
ValuationAttribute
除了使用DataAnnotation中预定义的一些特性进行数据验证外,我们还可以自定义一些验证特性。这里我们通过覆写DataAnnotation命名空间中ValudationAttribute类的IsValid方法来实现自定义验证。示例代码如下:
public class CheckAgeAttribute : ValidationAttribute{ private int _minage; public CheckAgeAttribute(int minAge) { _minage = minAge; } public override bool IsValid(object value) { if (value is int) { var age = value as int?; if (age == null) { return false; } if (age < _minage) { return false; } return true; } return false; } public override string FormatErrorMessage(string name) { return base.FormatErrorMessage(name); }}
标注特性:
public class Person{ [Display(Name = "姓名")] [Required(ErrorMessage = "姓名是必须的!")] [MaxLength(4, ErrorMessage = "太长了")] public string Name { set; get; } [Display(Name = "年龄")] [CheckAge(18, ErrorMessage = "年纪太小!")] public int Age { set; get; }}
然后运行程序:
IValidatableObject
通过实现IValidatableObject接口进行数据的验证,示例代码如下:
public class Person : IValidatableObject{ [Display(Name = "姓名")] public string Name { set; get; } [Display(Name = "年龄")] public int Age { set; get; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { Person person = validationContext.ObjectInstance as Person; if (person == null) { yield break; } if (string.IsNullOrEmpty(person.Name)) { yield return new ValidationResult("您贵姓?"); } if (person.Age < 18) { yield return new ValidationResult("太年轻了!"); } }}
运行程序:
IDataErrorInfo
实现IDataErrorInfo接口也可以进行数据的验证,示例代码如下:
public class Person : IDataErrorInfo{ [Display(Name = "姓名")] public string Name { set; get; } [Display(Name = "年龄")] public int Age { set; get; } public string this[string columnName] { get { switch (columnName) { case "Name": if (string.IsNullOrEmpty(Name)) { return "雁过留声,人过留名"; } return null; case "Age": if (Age < 18) { return "年纪尚轻!"; } break; } return null; } } public string Error { get { return "出错啦!"; } }}
运行程序:
版权声明
本文为作者原创,版权归作者雪飞鸿所有。 转载必须保留文章的完整性,且在页面明显位置处标明原文链接。
如有问题, 请发送邮件和作者联系。
ASP.NET MVC5中的Model验证
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。