2009-08-13 98 views
3

我有一个客户端dto包含一堆字段,也包含一个列表。现在复杂的模型绑定

,我可以绑定到它很容易,它会用他所有的地址显示的客户端。问题是用户可以动态地删除和添加地址。

我想过将围绕每个地址的形式,但后来我结束了内部形式,我知道浏览器不与发挥好。

然后我想到了使用JavaScript,但如果地址被删除,我必须查看所有地址并更改它们的索引(地址[0] .City),因为我注意到如果索引不正确,操作将ClientForm作为参数,那么只有具有连续索引并且从0开始的地址 - 才会进入ClientForm.Addresses列表。

任何其他的解决方案,很容易实现?我错过了什么吗?

回答

1

如果您在每个地址上放置了一个不同名称的提交按钮,但没有表格标签,您的外部表单可以检查是否存在特定的按钮并重定向到正确的操作(例如编辑地址编号1,删除地址3等)

如果您正在使用jQuery验证一个需要注意的是,所有的“孩子”的类型提交按钮必须设置为“取消”等按他们确认不会发生。

HTH,

+0

进一步详细描述不知道我明白你的意思:“你的外形可以检查所有脑干......”一个简单的例子将是巨大的。 – sirrocco 2009-08-13 08:43:42

1

为您的网页上的每个地址提供了一种称为addresses.Index一个隐藏的表单字段,这将需要一个整数值。的ASP.NET MVC模型粘合剂(在版本2以上)将收到addresses.Index表单域的多个值,并使用整数值,以确定哪些addresses[index].property字段值逻辑上属于一起。

E.g.

addresses.Index = 0 
addresses.Index = 3 

将促使模型绑定去寻找......

addresses[0].City 
addresses[0].Street 
addresses[3].City 
addresses[3].Street 

...并填充您的控制器操作的ICollection<Address>有两个元素。

当然,如果您可以删除并在您的页面上插入这些记录,您的Javascript将需要跟踪下一个索引以在全局变量中使用,以避免在多行中重复使用相同的索引(即,不要只是依靠包含地址元素的表的长度等)。

该解决方案Phil Haack here.

+0

索引甚至不需要是整数,对吧?我只是使用了一个独特的值,比如碰巧是一个整数的Id。这样我就不必为客户指定一个索引来确保它们保持独特。 – Benjamin 2011-08-12 18:33:59