2011-06-06 152 views
1

我正在研究一個ASP.Net MVC3應用程序,我無法理解正確的方法來執行我正在查找的驗證。驗證通過URL傳遞的參數

例如,假設一個模型,如下所示:

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

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

如果我有「2342」的標識,並嘗試後回,在模型映射踢和,因爲長度的記錄一個錯誤驗證。但是,如果對/ controller/2342執行GET,那麼MVC似乎很高興地創建了一個具有此無效狀態的模型(ModelState.Valid將爲true)。我可以在控制器中創建一些驗證來解決這個問題,但似乎是多餘的。

這樣做的最好方法是什麼?

謝謝! Jacob

+0

是否只允許爲您提供'POST'請求​​選項? – 2011-06-06 21:02:46

+0

不是真的在這個用例。它基本上是爲了編輯而拉上來的,雖然承諾變更不會成功,但我不希望它拉起一個虛假的條目。 – Jacob 2011-06-06 21:06:29

回答

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