Asp.net-Mvc
對於空的非必填欄位,ModelState 被標記為無效
有點神秘。我有一個帶有 Year 屬性的視圖模型:
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 欄位,因此我不清楚為什麼會生成此錯誤。有任何想法嗎?
我的第一個猜測是它拋出了一個你沒有設置年份並且它為空的異常?如果您將 year 設為 Nullable<int> ,它不會拋出所需的消息嗎?
我仍然不希望它是必需的,它是在黑暗中拍攝的
預設情況下,ValueType 被隱式標記為
Required在 mvc 中。實際上,這樣做是有目的的,因為根據定義,它們是不可為空的。我建議您設置
Year為int?,否則,如果您的情況不正確,您可能會更改為 false
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes在 Global.asax.cs 中。