我正在开发一个ASP.Net MVC3应用程序,我无法理解我正在寻找的验证的“正确方法”。
例如,考虑一个如下所示的模型:
[Required]
[StringLength(10, MinimumLength = 10)]
[RegularExpression("[0-9]{10}")]
public string Id { get; set; }
[Required]
public string Value { get; set; }
如果我的Id为“2342”并尝试回发,则由于长度验证,模型映射会启动并注册错误。但是,如果对/ controller / 2342执行GET,那么MVC似乎很乐意创建一个具有此无效状态的模型(ModelState.Valid将为true)。我可以在控制器中创建一些验证来捕获它,但它似乎是多余的。
这样做的最佳方式是什么?
谢谢! 雅各布
答案 0 :(得分:3)
执行GET时,您只需检索具有给定ID的模型。因此没有进行验证。如果您确实希望确保所请求的模型ID的长度为10个数字,则应在Global.asax中定义约束:
routes.MapRoute(
"Product",
"Product/{productId}",
new {controller="Product", action="Details"},
new {productId = @"[0-9]{10}" }
);
答案 1 :(得分:1)
框架中没有任何内容默认情况下在GET请求上验证模型,因为此时通常不需要验证。如果您确实想在此处强制进行验证,则可在此前一个问题中对此进行回答 看到: Validate model on initial request