2012-10-29 81 views
0

我從視圖中接收模型。
一些值會自動填入MVC ModelState錯誤地報告錯誤

然而,一些必需的值需要手動添加,就像這樣:所以在這裏

[HttpPost] 
public ActionResult Foobar(FooModel model, FormCollection collection) 
{ 
    // "timePicker" is a dropdown list containing different times 
    var time = collection["timePicker"].Split(':'); 
    model.Hours = int.Parse(time[0]); 
    model.Minutes = int.Parse(time[1]); 

    if (ModelState.IsValid) 
    { 
     ... // Do stuff 
    } 
} 

的問題:

ModelState.IsValid是假。
我調試它,它聲稱model.Minutesmodel.Hours未分配給。
...這是不對的,因爲我有剛分配他們的值

我考慮使用ModelState.Clear(),但我不想手動檢查所有其他信息是否有效。

有沒有其他方法可以解決問題?

回答

3

好吧,模型綁定,在ModelState中輸入錯誤,在輸入您的操作之前已經完成。

因此MinutesHours錯誤是在ModelState中,然後在小時和分鐘中添加值(使其無效)。

你可能只是刪除這些錯誤(而不是所有的錯誤,如Clear()一樣),這樣做:

ModelState.Remove("Hours"); 
ModelState.Remove("Minutes"); 

另一種方式來解決,這將是創建(和使用)的自定義ModelBinder的。

+0

+1,但我不記得如果密鑰不存在是否會引發異常。大概沒有:) – mattytommo

+0

@mattytommo好,在這種情況下,關鍵應該始終存在。順便說一下,如果不能刪除鍵(只讀字典或不存在的鍵),則該方法返回false,如果鍵已被刪除,則該方法返回true。 –

+0

@JacobSpire順便說一下,你也可以在這種情況下使用ViewModel,它可能會更好(或者,如上所述,自定義ModelBinder)。 –