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访问器上调用该 方法,以根据属性的验证属性检查值.当数据绑定从验证属性接收验证异常时,还必须将bothValidatesOnExceptions和NotifyOnValidationErrorproperties 都设置为true.有关手动应用验证的示例,请参阅下面的数据绑定示例.