我在页面上有以下输入:
@using(Html.BeginForm())
{
@Html.TextBox(String.Format("someData[{0}].Key", 0))
@Html.TextBox(String.Format("someData[{0}].Key", 1))
@Html.TextBox(String.Format("someData[{0}].Value", 0))
@Html.TextBox(String.Format("someData[{0}].Value", 1))
<input type="submit" value="Go" />
}
我的印象是发布这些数据应该通过 MVC 中的默认模型绑定器绑定到 IDictionary。但是,我希望字典的键是数字:
public ActionResult MyAction(IDictionary<long?, string> someData)
{
//...
}
我使用 Javascript 在客户端验证这些字段,但是如果我关闭 JS 并提交表单而不在框中输入任何内容,我会得到一个InvalidCastException
说法,即模型绑定器无法绑定到 someData 集合。
我敢肯定,在以前版本的 MVC 中(我们最近升级了),并且因为 Dictionary 键是可以为空(long?)
的,如果为“.Key”输入(即非数字)输入了无效数据,字典只是省略了输入集合。
当然,在这种情况下,您可以在不启用 JS 的情况下提交一个空表单吗?当我提交表单时,我的操作甚至没有被命中(断点),所以我自己无法捕捉到错误并添加到 ModelState...