在 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 数据注释的主要内容,如果未能解决你的问题,请参考以下文章