数据注释如何工作?

Che*_*hev 24 c# validation asp.net-mvc data-annotations asp.net-mvc-3

我在ASP.NET MVC 3项目中使用Data Annotations来验证模型.这些都非常方便,但目前它们对我来说都很神奇.我读到数据注释不会抛出异常.那么MVC如何知道将验证错误添加到模型状态字典中?如果没有抛出异常,由于模型验证而在模型上设置属性的失败如何冒泡到MVC?我总是假设每次属性失败时抛出异常,并且MVC模型绑定捕获异常并将其添加到模型状态字典中.

为了测试这个,我创建了一个控制台应用程序,并添加了一个带有验证注释的示例类:

public class MyObject
{
    [StringLength(10, MinimumLength=3)]
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我实例化了该对象,并尝试为Name属性分配小于3的值.尽管注释表明字符串长度小于3,但该属性分配得很好.

    static void Main(string[] args)
    {
        MyObject mine = new MyObject();
        mine.Name = "hi";
        Console.WriteLine(mine.Name);
        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

这个小程序向控制台写出"hi".为什么?当我试图设置mine.Name为"hi" 时,我期待它生气.

我错过了什么?

提前致谢.

Joh*_*ner 16

你永远不会调用任何东西来验证属性.验证不会自己神奇地发生.来自http://msdn.microsoft.com/en-us/library/dd901590%28v=vs.95%29.aspx

手动验证值

如果不使用DataGrid控件提供编辑数据的界面,则不会自动应用验证属性.但是,您可以使用Validator该类手动应用验证测试 .您可以ValidateProperty在属性的set访问器上调用该 方法,以根据属性的验证属性检查值.当数据绑定从验证属性接收验证异常时,还必须将both ValidatesOnExceptionsNotifyOnValidationErrorproperties 都设置为true.有关手动应用验证的示例,请参阅下面的数据绑定示例.

  • 它不在我的名字上.那可能应该是"从属性的set访问者的*inside*中调用`Validate.ValidateProperty`方法......" (5认同)