0

我从视图中接收模型。
一些值是自动填充的。

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

[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(),但我不想手动检查所有其余信息是否有效。

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

4

1 回答 1

3

好吧,模型绑定,将错误放入ModelState,在进入您的操作之前已经完成。

因此,在您在 Hours 和 Minutes 中添加值之前(这使其无效),ModelState 中出现了Minutesand错误。Hours

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

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

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

于 2012-10-29T08:58:16.930 回答