我有一个页面上的以下输入:MVC4模型绑定到词典(重大更改?)
@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" />
}
我的印象是,发布此数据应通过在默认的模型绑定绑定到一个IDictionary MVC。不过,我想字典的关键是数字:
public ActionResult MyAction(IDictionary<long?, string> someData)
{
//...
}
使用JavaScript来验证客户端上的这些字段,但是如果我把JS关闭,并提交表单,而不在框中输入任何内容,我得到一个InvalidCastException
说模型联编程序不能绑定到someData集合。
我敢肯定,在MVC以前的版本(我们最近升级),并因为字典键可为空(long?)
,如果无效数据的'。重点的投入进入(即非数字),字典只是省略了集合中的条目。
当然,您可以在这种情况下提交一个没有启用JS的空表单吗?我的行为是不是连打(断点)当我提交表单,所以我不能抓住自己的错误,并添加到ModelState中......
为什么不使用强类型模型绑定方法? – Shyju
这很复杂!该页面有一个ViewModel,但是这是非常定制的功能添加到现有的视图(这是共享),并只在非常特定的情况下使用。试图添加一些不那么好的遗留代码的乐趣:( –