我在MVC4中發現了一些使我困惑的功能。我有以下的模型和控制器動作:忽略int屬性時未收到ModelState錯誤
public class MyModel
{
public int Foo { get; set; }
}
public ActionResult MyAction(MyModel model)
{
// check ModelState.IsValid and do stuff
}
我遇到的問題是,如果我做一個GET請求MyAction並沒有任何參數傳遞,然後ModelState.IsValid是真實的。如果我將Foo作爲參數傳入一個空字符串作爲值,那麼ModelState.IsValid如預期的那樣爲false(帶有需要Foo的錯誤消息)。
所以我想我的問題是,當富被省略爲什麼ModelState.IsValid真的嗎?這是MVC中的錯誤還是我錯過了什麼?如果需要屬性,那麼當該屬性被省略時,似乎應該有一個ModelState錯誤。
只是踢我試圖改變美孚爲字符串,並添加[必需]屬性給它。當我這樣做時,上述兩個測試都返回了假的ModelState.IsValid,這也是我期望它爲非空的int屬性所做的。在這個測試之後,我將Foo改回到了一個int,並且留下了[Required]屬性,看看它是否有效。當它是一個沒有[Required]屬性的int時,仍然得到相同的結果。
你確定'Foo'在你忽略它的時候是空的,還是默認爲0?我猜'Foo'會是0,如果沒有'[Required]'屬性,它會通過驗證。 – Brandon
@布蘭登我從來沒有說過,當省略時,Foo是空的。在這兩種情況下都是0,但只有其中一種情況會引發ModelState錯誤。當省略時,它通過帶或不帶[Required]屬性的驗證(當Foo是一個int時)。 – bbak
我想不同的是,一個不可爲空的'int'在模型中會有一個值,當它通過時沒有標記中的字段..即零。然而,一個'字符串',如果它在標記中沒有通過,它將是'null'。對我有意義(不是bug)。 –