2013-03-26 36 views
8

有點神祕。我有一個年度性的視圖模型:ModelState對於空的非必填字段標記爲無效

public class TradeSpendingSalesViewModel 
{  
    public string ProductCode { get; set; } 
    public IEnumerable<SelectListItem> AllowTypeSelect { get; set; } 
    public string AllowType { get; set; } 
    public IEnumerable<SelectListItem> YearsSelect { get; set; } 
    public int Year { get; set; } 
} 

如果我上傳一個空視圖模型給我的控制器:

[HttpPost] 
public ActionResult Index(TradeSpendingSalesViewModel vm) 
{ 
    var allErrors = ModelState.Values.SelectMany(v => v.Errors); 
    foreach (var e in allErrors) 
    { 
     Response.Write(e.ErrorMessage); 
    } 
} 

然後我得到的消息,一個錯誤:「是必需的年份場「。

由於我沒有使用Required屬性對viewmodel Year字段進行註釋,我不清楚爲什麼會生成此錯誤。

任何想法?

回答

13

我的第一個猜測是它拋出一個異常,你不設置年份,它是空的?如果您將年份設爲可空的<int>是否不會拋出所需的消息?

我仍然不會指望它是必需的,這是在黑暗中

+2

邦先生,先生,完全正確。 – 2013-03-26 18:08:37

15

值類型默認情況下,一杆被隱式標記爲MVC Required。這實際上是爲了達到目的而完成的,因爲它們通過定義是不可空的。

我建議您設置的Yearint?,否則,如果它不是你的情況是正確的,你可以在Global.asax.cs中更改爲false

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes

+1

您驗證了我的想法,從我上面的答案中爲您+1 +1 – 2013-03-26 17:44:41

+2

不可空值始終是必需的。如果你想有一個非必需的Integer值,你必須將它設置爲空。 – TheBigCheese 2013-03-26 17:48:49

相關問題