C#中手工进行声明式验证,从此远离if验证
2021/7/28 11:35:46
本文主要是介绍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, true); if (!isValid) { return Content(string.Join("<br/>", results.Select(x => x.ErrorMessage))); } else { return Content("OK"); } }
执行结果:
Title 字段是必需的。
从此可以借助声明式验证让代码更漂亮。
这篇关于C#中手工进行声明式验证,从此远离if验证的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#