我从视图中收到一个模型 某些值会自动填入。
但是,需要手动添加一些必需的值,如下所示:
[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.Minutes
和model.Hours
未分配给。{
......哪个不是真的,因为我已经分配了他们的值!
我考虑使用ModelState.Clear()
,但我不想手动检查所有其他信息是否有效。
有没有其他方法可以解决这个问题?
答案 0 :(得分:3)
嗯,在进入你的行动之前,已经完成了ModelState
中的模型绑定错误。
因此,在以小时和分钟添加值(使其无效)之前,Minutes
和Hours
错误在ModelState中。
您可以通过执行以下操作来删除这些错误(而不是Clear()
所做的所有错误):
ModelState.Remove("Hours");
ModelState.Remove("Minutes");
解决此问题的另一种方法是创建(和使用)自定义ModelBinder。