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 字段是必需的。
从此可以借助声明式验证让代码更漂亮。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 大模型 Token 究竟是啥:图解大模型Token
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 继承的思维:从思维模式到架构设计的深度解析
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 感觉程序员要被 AI 淘汰了?学什么才有机会?
· BotSharp + MCP 三步实现智能体开发
· “你觉得客户需要”是杀死TA的最后一根稻草 | IPD集成产品开发
· dify升级,PostgreSQL数据库字段更新处理
· Java 与 LLM 大模型融合的技术革命:JBoltAI 如何重构企业级 AI 开发范式
2012-01-05 Entity Framework - 理清关系 - 基于共享主键的单向一对一关系
2007-01-05 欢迎大家针对ORM的话题展开讨论