2011-06-10 61 views
1

要驗證綁定到一個具體類型HttpPost行動,我可以用ModelState.IsValidif(ModelState.IsValid)不能與FormsCollection一起使用。代替使用什麼?

public ActionResult Create(MyModelType myModel) 
    { 
     if(ModelState.IsValid) 
     { 
      // Do some stuff 
      return RedirectToAction("Details", 0); 
     } 
     else 
     { 
      return View(); 
     } 
    } 

這顯然不會有FormCollection工作,因爲沒有模型驗證

public ActionResult Create(FormCollection collection) 
    { 
     if(ModelState.IsValid) // Never invalid 
     { 

當動作接受FormCollection時,應該用什麼來代替ModelState.IsValid

附:千道歉,我知道這是一個愚蠢的問題

回答

2

這是正常的。您需要UpdateModel

public ActionResult Create() 
{ 
    var model = new MyModelType(); 
    UpdateModel(model); 
    if(ModelState.IsValid) 
    { 
     ... 
    } 
    ... 
} 

在默認模式粘結劑被調用,因爲它需要你的模型從請求綁定尚屬首例。這個默認模型聯編程序將根據您的數據註解規則執行驗證。在第二種情況下,你什麼都不做。控制器操作不瞭解您的模型及其驗證的數據註釋。所以模型狀態總是有效的,因爲沒有任何東西會使它失效。

這是說,你應該總是使用第一種方法。 FormCollection只是沒用。即使你採用第二種方法(我完全不會推薦),你可以看到你不需要任何FormCollection。

+0

感謝您的伴侶。我想克服的問題是。 。 。我的第一個Asp Mvc應用程序(這也是我的第一個 - 從零開始 - Web應用程序)是一個內部概念證明,需要在運行時創建動態表單。 UpdateModel是一個通用的方法,我不會在編譯時知道模型類型。有什麼建議麼? – 2011-06-10 10:44:43

+1

@Binary Worrier,因爲驗證是在你的模型上定義的,所以你需要一個模型。如果你有一些動態表單,那麼你將不得不手動進行驗證。就像讀取請求值(當然這將是一個字符串),將其解析爲相應的類型,驗證它是否有效,以及是否不添加模型錯誤等等。這裏沒有魔法。 – 2011-06-10 11:00:26

+0

這就是我要去的方式,謝謝你的所有幫助伴侶。 。 。附:我一直在尋找大約20個小時左右的Asp Mvc,我仍然處於**所有**看起來像神奇的階段:)我需要手動完成所有的驗證實際上會簡化一些事情。再次感謝隊友。 – 2011-06-10 11:07:18

相關問題