2009-08-13 203 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