让我们说a有以下模型
public class FirstModel
{
public List<SecondModel> SecondModels { get; set; }
}
public class SecondModel
{
public string Value { get; set; }
}
这个视图
@model FirstModel
....
<input name="SecondModels[0].Value" value="test1"/>
<input name="SecondModels[1].Value" value="test2"/>
<input name="SecondModels[2].Value" value="test3"/>
...
Modelbinding效果很好。我将完整的Model送到了ActionMethod。
但是如果我使用例如jQuery删除中间的项目。
<input name="SecondModels[0].Value" value="test1"/>
<input name="SecondModels[2].Value" value="test3"/>
我丢失了SecondModels[2]
,因为ModelBinder无法绑定。
所以我只得到第一个(“test1”)。
是否有另一个语法或CustomModelBinder能够正确绑定它,还是我需要在删除项目后替换input
名称?
非常感谢你!
答案 0 :(得分:4)
您可以在此处使用ASP.NET MVC的非顺序模型绑定功能。在您的情况下,您需要以下内容:
<input type="hidden" name="SecondModels.Index" value="0" />
<input name="SecondModels[0].Value" value="test1"/>
<input type="hidden" name="SecondModels.Index" value="2" />
<input name="SecondModels[2].Value" value="test3"/>
有关更多信息,请查看Phil Haack博客文章的非顺序指数部分:
答案 1 :(得分:0)
我在过去的项目中遇到过这个......
我的快速而肮脏的解决方案是使用适当的值重新索引项目列表。
所以:
<input name="SecondModels[0].Value" value="test1"/>
<input name="SecondModels[1].Value" value="test2"/>
<input name="SecondModels[2].Value" value="test3"/>
<input name="SecondModels[3].Value" value="test4"/>
<input name="SecondModels[4].Value" value="test5"/>
成为这个(当删除索引1和3时):
<input name="SecondModels[0].Value" value="test1"/>
<input name="SecondModels[1].Value" value="test3"/>
<input name="SecondModels[2].Value" value="test5"/>