11

有点神秘。我有一个带有 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 字段,因此我不清楚为什么会生成此错误。

有任何想法吗?

4

2 回答 2

17

默认情况下,ValueType 被隐式标记为Required在 mvc 中。实际上,这样做是有目的的,因为根据定义,它们是不可为空的。

我建议您设置Yearint?,否则,如果您的情况不正确,您可能会更改为 false

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes

在 Global.asax.cs 中。

于 2013-03-26T17:43:56.893 回答
15

我的第一个猜测是它抛出了一个你没有设置年份并且它为空的异常?如果您将 year 设为 Nullable<int> ,它不会抛出所需的消息吗?

我仍然不希望它是必需的,它是在黑暗中拍摄的

于 2013-03-26T17:35:58.703 回答