Asp.net-Mvc

對於空的非必填欄位,ModelState 被標記為無效

  • April 29, 2018

有點神秘。我有一個帶有 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 中。實際上,這樣做是有目的的,因為根據定義,它們是不可為空的。

我建議您設置Yearint?,否則,如果您的情況不正確,您可能會更改為 false

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes

在 Global.asax.cs 中。

引用自:https://stackoverflow.com/questions/15643282