asp.net mvc 3 在模型上运行验证

发布于 2024-11-02 16:40:41 字数 372 浏览 4 评论 0原文

如何在模型上运行所有 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

我知道这可能是一个愚蠢的问题,但我似乎无法在任何地方找到答案。

How can i run all DataAnnotation validations on model?

I'm building a model instance from code and i don't have no modelstate binding or anything. I just want to run all my validations against it... I am using 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

I know it's probably a stupid question but i can't seem to find an answer anywhere..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鲸落 2024-11-09 16:40:41

这类似于这个关于单元测试数据注释的问题。您可以添加与此类似的扩展方法:

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;
    }
}

This is similar to this question about unit testing data annotations. You could add an extension method similar to this:

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;
    }
}
心不设防 2024-11-09 16:40:41

这个问题的标题包括 ASP.net MVC

请注意,Validator 类和 MVC 验证存在细微差别。

例如:

  1. DataAnnotations.Validator 不支持开箱即用的好友类。
  2. MVC 可以配置为使用其他验证框架,例如 FluentValidation。

如果您想要运行 MVC 的验证并填充 ModelState,您可以调用 TryValidateModelValidateModel

如果您不想填充 ModelState,请在控制器中使用此代码片段。

 var metadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, model.GetType());
 ModelValidator.GetModelValidator(metadata, ControllerContext).Validate(null);

The title of this question includes ASP.net MVC.

Please be aware that the Validator class and MVCs validation has subtle differences.

For example:

  1. DataAnnotations.Validator doesn't support buddy class out of box.
  2. MVC can be configured to use another validation framework for example FluentValidation.

If you want to run MVC's validation and populate the ModelState, you can call the TryValidateModel or ValidateModel.

if you don't want to populate the ModelState, use this code snippet in your controller.

 var metadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, model.GetType());
 ModelValidator.GetModelValidator(metadata, ControllerContext).Validate(null);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文