Model验证是ASP.NET MVC中的重要部分,这篇文章就介绍下ASP.NET MVC中Model验证的几种方式。
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 "出错啦!"; } } }
运行程序:
版权声明
本文为作者原创,版权归作者雪飞鸿所有。 转载必须保留文章的完整性,且在页面明显位置处标明原文链接。
如有问题, 请发送邮件和作者联系。
时间: 2024-10-27 17:39:39