非常奇怪的问题......我的控制器中有这样的东西:
public ActionResult Initialize(IEnumerable<MyModel> Requests)
{
...
}
我在提交视图中生成表单元素,如下所示:
Requests[90ed54f6-4650-44c7-8cc2-c4d225a9a334].Name
Requests[90ed54f6-4650-44c7-8cc2-c4d225a9a334].Address
Requests[db67e8e5-94f8-4b35-b69c-65184980f2a1].Name
Requests[db67e8e5-94f8-4b35-b69c-65184980f2a1].Address
在Firefox上,当我用多个元素提交它时,活页夹工作,我得到一个对象集合。在Safari上,完全相同的数据始终只在集合中生成一个对象。
奇怪的是,在调试器中,如果我查看Requests.Params.AllKeys [],我会看到值 - 它们被提交,只是某种程度上没有绑定。我在Firefox上使用Firebug但没有用于Safari的等效工具。因为我在Request.Params中看到了这些值,所以我认为传入的表单值不是问题 - 只是关于它们被绑定到ViewModel的方式......
活页夹对我来说是一种黑魔法 - 我不确定它的存在位置,如果我可以通过它看看它在做什么。
任何想法可能是什么或我如何追逐它?
编辑:这也适用于IE浏览器 - 只是Safari表现得很奇怪。
编辑2:我撒了...... Safari没有像我期望的那样发布索引值:
Requests.index = {GUID}
Requests[90ed54f6-4650-44c7-8cc2-c4d225a9a334].Name
Requests[90ed54f6-4650-44c7-8cc2-c4d225a9a334].Address
Requests.index = {GUID}
Requests[db67e8e5-94f8-4b35-b69c-65184980f2a1].Name
Requests[db67e8e5-94f8-4b35-b69c-65184980f2a1].Address
Firefox和Internet Explorer都将Requests.index
值作为逗号分隔值发布,但Safari仅发布第一个值。我不确定这种情况的“正确”是什么,但这是我可以陷入其中的事情。
答案 0 :(得分:1)
我假设“index”是一个GUID,它充当请求的id。我认为你实际上会产生类似的东西:
<input type="hidden" name="Requests[0].ID" value="90ed54f6-4650-44c7-8cc2-c4d225a9a334" />
<input type="text" name="Requests[0].Name" />
<input type="text" name="Requests[0].Address" />
当然,您的MyModel类需要具有ID属性来保存Guid。
我怀疑它与查询参数的编码方式有关,但老实说,我从未按照你的方式设置集合,我不清楚模型绑定器应该如何解释参数索引 - 也许它将它们全部映射到0 - 如果它不是数字。
答案 1 :(得分:0)
比较每个浏览器POST的实际值:
public ActionResult Initialize(FormCollection collection)
{
//... dump the collection's NameValueCollection ...
}
并比较浏览器之间表单的实际HTML呈现,以确保。
答案 2 :(得分:0)