首页 > 代码库 > C#中手工进行声明式验证,从此远离if验证

C#中手工进行声明式验证,从此远离if验证

今天在一个ASP.NET MVC Controller Action中写代码时,需要对ViewModel的字段进行验证。但这个Action处理的是手工编写的ajax请求(不是表单提交),无法使用ASP.NET MVC Validation功能。

MVC Action示例代码如下:

public async Task<ActionResult> Save(int? postId, PostModel post){    //验证post的属性,比如Titile不能为空}

按照以前的写法,就要写if语句进行判断:

public async Task<ActionResult> Save(int? postId, PostModel post){    if(string.IsNullOrEmpty(post.Title))    {        return Content("Title 字段是必需的。");    }}

但今天在声明式验证的美丽身姿的诱惑下,再也不想写这样的累赘代码,于是采取行动,作出改变。

声明式验证只需要在要验证的ViewModel的字段上加上相应的声明,比如针对文中的示例:

public class PostModel{    [Required]    public string Title { get; set; }}

但现在的代码场景需要手工触发这个验证并且拿到验证结果,那如何实现呢?

。。。

后来在网上找到了解决方法——Manual Validation with Data Annotations。

只需调用 System.ComponentModel.DataAnnotations.Validator.TryValidateObject() 就能实现,示例实现代码如下:

public async Task<ActionResult> Save(int? postId, PostModel post){    var validationContext = new ValidationContext(post);    var results = new List<ValidationResult>();    var isValid = Validator.TryValidateObject(post, validationContext, results);    if (!isValid)    {        return Content(string.Join("<br/>", results.Select(x => x.ErrorMessage)));    }    else    {        return Content("OK");    }     }

执行结果:

Title 字段是必需的。

从此可以借助声明式验证让代码更漂亮。

C#中手工进行声明式验证,从此远离if验证