2011-06-06 15 views
1

ASP.Net MVC3アプリケーションで作業していますが、私が探している妥当性検査を行うための「正しい方法」の理解に問題があります。私は「2342」のIDを持っているとバックPOSTしようとした場合URLを介して渡されるパラメータの妥当性確認

[Required] 
    [StringLength(10, MinimumLength = 10)] 
    [RegularExpression("[0-9]{10}")] 
    public string Id { get; set; } 

    [Required] 
    public string Value { get; set; } 

は、モデルのマッピングでキックとが原因の長さのエラーを登録します。

たとえば、次のようになりますモデルを考えます検証。しかし、/コントローラ/ 2342に対してGETを実行すると、MVCはこの無効な状態(ModelState.Validが真となります)のモデルをうれしく作成するようです。私はコントローラでこれをキャッチするいくつかのバリデーションを作成することができますが、それは冗長なようです。

これを行うにはどのような方法が最適ですか?

ありがとうございます! Jacob

+0

あなただけにオプションを要求していますか? –

+0

このユースケースでは実際にはありません。基本的には編集のためにそれを取り上げていますが、変更をコミットするのは成功しませんが、私は偽のエントリをプルアップしたくありません。 – Jacob

答えて

3

GETを実行するときは、特定のIDを持つモデルを取得するだけです。したがって、検証は実行されません。あなたは本当に要求されたモデルIDは、長さが10個の数字であることを確認する場合は、Global.asaxの中で制約を定義する必要があります

routes.MapRoute(
    "Product", 
    "Product/{productId}", 
    new {controller="Product", action="Details"}, 
    new {productId = @"[0-9]{10}" } 
); 
1

デフォルトでGET要求にモデルを検証する枠組みの中では何もありませんその時点で検証は一般的に必要ではないためです。ここで検証を強制したい場合、これは前の質問 で答えられました: Validate model on initial request

関連する問題