验证通过URL传递的参数

时间:2011-06-06 20:58:08

标签: asp.net-mvc-3

我正在开发一个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)。我可以在控制器中创建一些验证来捕获它,但它似乎是多余的。

这样做的最佳方式是什么?

谢谢! 雅各布

2 个答案:

答案 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