MVC ModelState错误地报告错误

时间:2012-10-29 08:54:22

标签: asp.net-mvc validation modelstate

我从视图中收到一个模型 某些值会自动填入。

但是,需要手动添加一些必需的值,如下所示:

[HttpPost]
public ActionResult Foobar(FooModel model, FormCollection collection)
{
    // "timePicker" is a dropdown list containing different times
    var time = collection["timePicker"].Split(':');
    model.Hours = int.Parse(time[0]);
    model.Minutes = int.Parse(time[1]);

    if (ModelState.IsValid)
    {
        ... // Do stuff
    }
}

所以这就是问题所在:

ModelState.IsValid是假的。
我对其进行了调试,并声称model.Minutesmodel.Hours未分配给。{ ......哪个不是真的,因为我已经分配了他们的值!

我考虑使用ModelState.Clear(),但我不想手动检查所有其他信息是否有效。

有没有其他方法可以解决这个问题?

1 个答案:

答案 0 :(得分:3)

嗯,在进入你的行动之前,已经完成了ModelState中的模型绑定错误。

因此,在以小时和分钟添加值(使其无效)之前,MinutesHours错误在ModelState中。

您可以通过执行以下操作来删除这些错误(而不是Clear()所做的所有错误):

ModelState.Remove("Hours");
ModelState.Remove("Minutes");

解决此问题的另一种方法是创建(和使用)自定义ModelBinder。