asp.net mvc 3 在模型上运行验证
Posted
技术标签:
【中文标题】asp.net mvc 3 在模型上运行验证【英文标题】:asp.net mvc 3 run validations on a model 【发布时间】:2011-04-23 02:18:38 【问题描述】:如何在模型上运行所有 DataAnnotation 验证?
我正在从代码构建模型实例,但我没有模型状态绑定或任何东西。我只想针对它运行所有验证...我正在使用 EF CodeFirst。
public class Category
public int Id get; set;
[Required]
public string Name get; set;
cat = new Category();
if (cat.IsValid()) /* blah */ // i want something like this
我知道这可能是一个愚蠢的问题,但我似乎无法在任何地方找到答案..
【问题讨论】:
Unit Testing ASP.NET DataAnnotations validation的可能重复 【参考方案1】:这类似于this question about unit testing data annotations。您可以添加类似这样的扩展方法:
public static class ValidationExtension
public static bool IsValid<T>(this T model) where T: class
var validationResults = new List<ValidationResult>();
var validationContext = new ValidationContext(model, null, null);
Validator.TryValidateObject(model, validationContext, validationResults, true);
return validationResults.Count == 0;
【讨论】:
【参考方案2】:本题题目包含 ASP.net MVC。
请注意,Validator 类和 MVC 验证有细微的差别。
例如:
-
DataAnnotations.Validator 不支持开箱即用的好友类。
可以将 MVC 配置为使用其他验证框架,例如 FluentValidation。
如果要运行 MVC 的验证并填充 ModelState,可以调用 TryValidateModel 或 ValidateModel。
如果您不想填充 ModelState,请在控制器中使用此代码 sn-p。
var metadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, model.GetType());
ModelValidator.GetModelValidator(metadata, ControllerContext).Validate(null);
【讨论】:
以上是关于asp.net mvc 3 在模型上运行验证的主要内容,如果未能解决你的问题,请参考以下文章
客户端验证在带有 Bootstrap 的 ASP.NET MVC5 中不起作用