有点神秘。我有一个带有Year属性的viewmodel:
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; }
}
如果我将一个空的viewmodel发布到我的控制器:
[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字段,因此我不清楚为什么会生成此错误。
有什么想法吗?
答案 0 :(得分:16)
默认情况下,ValueTypes在mvc中隐式标记为Required
。实际上,这是为了目的,因为根据定义它们是不可为空的。
我建议您将Year
设为int?
,否则,如果您的情况不正确,则可能会更改为
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes
在Global.asax.cs。
答案 1 :(得分:15)
我的第一个猜测是它会抛出一个异常,你没有设置年份而且它是空的?如果你把年份变为Nullable&lt; int&gt;它不会抛出所需的消息吗?
我仍然不希望它被要求,它是在黑暗中拍摄的