在 MVC 之外使用 ASP.Net MVC 数据注释

Posted

技术标签:

【中文标题】在 MVC 之外使用 ASP.Net MVC 数据注释【英文标题】:Using ASP.Net MVC Data Annotation outside of MVC 【发布时间】:2011-03-06 14:36:24 【问题描述】:

我想知道是否有一种方法可以在没有 MVC 站点的情况下使用 ASP.Net 的数据注释。

我的例子是我有一个类,一旦创建就需要验证,否则会抛出错误。我喜欢 data annotations 方法,而不是 initaliser 触发的一堆 if 块。

有没有办法让它工作?

我以为会是这样的:

添加数据注释 在初始化程序中触发一个方法,该方法调用类上的 MVC 验证器

有什么想法吗?我必须承认我没有将 MVC 框架添加到我的项目中,因为我希望我可以只使用数据注释类 System.ComponentModel.DataValidation

【问题讨论】:

我创建了自己的 DataValidation 类版本,如果人们有兴趣,我可以将其外包。它是在 MVC2 之前完成的,可以容纳更复杂的情况。 【参考方案1】:

这是一个例子:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

public class Foo

    [Required(ErrorMessage = "the Bar is absolutely required :-)")]
    public string Bar  get; set; 


class Program

    public static void Main()
    
        var foo = new Foo();
        var results = new List<ValidationResult>();
        var context = new ValidationContext(foo, null, null);
        if (!Validator.TryValidateObject(foo, context, results))
        
            foreach (var error in results)
            
                Console.WriteLine(error.ErrorMessage);
            
        
    

但老实说FluentValidation 更强大。

【讨论】:

我在寻找 .Net 3.5 解决方案 - ValidationContext 在 .Net 4.0 之前不可用 @Doug 可能想将其作为问题中的要求。 不幸的是,此验证不会通过任何复杂的子对象或集合进行递归。 Validator.TryValidateObject(...) 只是立即进行属性和字段验证,并称之为一天,而不是在 MVC 世界中的控制器中发生的模型绑定上的验证,它遍历整个对象图。 在我的例子中,对TryValidateObject 的调用只检查RequiredAttribute。如果您想使用来自System.ComponentModel.DataAnnotations 的其他验证器,例如MaxLengthAttribute,请为第四个参数(validateAllProperties)添加true。请参阅***.com/questions/5368672/… 接受的答案

以上是关于在 MVC 之外使用 ASP.Net MVC 数据注释的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC+Ajax前后端交互

将 ASP.NET MVC5 身份验证添加到现有项目

如何使用 mvc 6、asp.net 5 注册全局过滤器

使用 MVC 和 ASP.NET 身份进行 URL 授权

ASP.NET MVC / C#:如何显示属于另一个控制器的部分视图数据

ASP.Net MVC 3 中的图表