验证 – 如何强制MVC验证IValidatableObject
发布时间:2020-12-15 18:54:42 所属栏目:asp.Net 来源:网络整理
导读:看来,当MVC验证一个模型,它运行通过DataAnnotation属性(如required,或范围),如果任何一个失败,它跳过运行我的IValidatableObject模型上的Validate方法。 有没有办法让MVC继续运行该方法,即使其他验证失败? 解决方法 您可以通过传入ValidationContext
看来,当MVC验证一个模型,它运行通过DataAnnotation属性(如required,或范围),如果任何一个失败,它跳过运行我的IValidatableObject模型上的Validate方法。
有没有办法让MVC继续运行该方法,即使其他验证失败? 解决方法
您可以通过传入ValidationContext的新实例手动调用Validate(),如下所示:
[HttpPost] public ActionResult Create(Model model) { if (!ModelState.IsValid) { var errors = model.Validate(new ValidationContext(model,null,null)); foreach (var error in errors) foreach (var memberName in error.MemberNames) ModelState.AddModelError(memberName,error.ErrorMessage); return View(post); } } 这种方法的一个警告是,在没有属性级(DataAnnotation)错误的情况下,验证将运行两次。为了避免这种情况,你可以给你的模型添加一个属性,比如一个布尔值Validated,你的Validate()方法中设置为true,一旦它运行,然后在手动调用控制器中的方法之前检查。 所以在你的控制器: if (!ModelState.IsValid) { if (!model.Validated) { var validationResults = model.Validate(new ValidationContext(model,null)); foreach (var error in validationResults) foreach (var memberName in error.MemberNames) ModelState.AddModelError(memberName,error.ErrorMessage); } return View(post); } 在你的模型: public bool Validated { get; set; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { // perform validation Validated = true; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 如何将401认证错误返回给RestSharp客户端?
- asp.net-mvc-3 – 当两个网格位于同一页面时进行排序
- asp.net-mvc – 通过F#代码迭代插入ASP.NET MVC4页面的View
- asp.net-mvc – 当ModelState为InValid时调用的Ajax.BeginF
- 在Asp.Net中发送电子邮件时出错错误代码为0x80040217
- asp.net – PayPal Express Checkout MVC C#示例代码
- asp.net-mvc – .NET MVC:计算Web应用程序中的Action方法
- asp.net – 部署在Visual Studio中正常运行,无法使用MSDepl
- js_html_input中autocomplete="off"在chrom中失效的
- asp.net – 如何从代码隐藏中清除所有表单字段?
推荐文章
站长推荐
- asp.net-mvc – Sitecore:添加到此处按钮未显示
- asp.net – 有人可以帮我理解这个堆栈跟踪吗?
- asp.net – 将Always Encrypted Certificate放在
- asp.net-mvc – 为什么UserManager.CreateIdenti
- asp.net – 改进MonoRail
- asp.net-mvc – MVC的编码标准 – 它们是官方的吗
- asp.net – 使用ModalPopupExtender而不必设置Ta
- .NET Core的文件系统[3]:由PhysicalFileProvide
- asp.net-core – 为什么要在src文件夹中组织项目
- asp.net – Umbraco有没有好的电子商务扩展/插件
热点阅读