2010-03-26 54 views
2

假設您在ASP.NET中有一個頁面,使用JavaScript/jQuery來修改DOM最終將由服務器在提交時讀取的值。例如,您有一個允許最終用戶添加/刪除對象的表單(例如健康保險表單上的依賴項或貸款申請表上的資產)。在ASP.NET中跟蹤動態創建的DOM元素的方法

一旦提交信息,有什麼方法可以確保服務器檢測並檢索這些項目?

我試過幾件事,工作,但沒有一個看起來很完美,所以我想看看社區提供什麼。

此外,我不尋找避免動態DOM元素(如使用嚮導等)的建議。我特別試圖通過動態創建的DOM元素來改進我的技巧。

+0

那麼,你有什麼發現_works_? – Jeremy 2010-03-26 12:59:32

+0

+1 - 有趣的問題 – Ramesh 2010-03-26 13:02:21

+0

@Jer - 我的方法假定了一個預定義的標識符,並且我的檢索數據的方法感覺很髒(對DOM元素的數量進行假設等)。我真的很喜歡Jan對lambda運算符的使用 - 沒有想到這一點,它看起來非常乾淨。 – Mayo 2010-03-26 14:47:24

回答

2

有兩種方法可以做這樣的事情:

第一:只有職位上提交的信息。只要您將nameid屬性添加到DOM中的每個元素,每個元素都會在Request.Form中表示,因此您可以輕鬆地遍歷該集合。

我傾向於有一個命名約定,如insurance_row_1insurance_row_2等等。你可以找到所有的行像Request.Form.AllKeys.Where(k=>k.StartsWith("insurance_row_"))


當要保存在服務器上的每一個動作:

保持在JavaScript中的狀態的容器,在一些字典的控制,你把已經由您執行的每個動作保持着信息應用程序以及服務器是否處理它們的狀態。喜歡的東西:

var stateContainer = [ 
     { 'put-insurance-row-1', false }, 
     { 'delete-insurance-row-1', false } 
]; 

做一個AJAX請求到服務器來執行這樣的操作,並使用狀態容器重點跟蹤請求是成功還是失敗。請求成功提交後,將狀態設置爲「真」。請務必按照接收事件的順序執行此操作,以便將它們逐個發送到服務器以確保您保持有效狀態。

如果某些狀態尚未保留,您可以(嘗試)阻止關閉瀏覽器。

0

你爲什麼要用客戶端代碼來做到這一點?我會去做一個回發並從服務器端代碼添加一個控件的路線。內置的ajax更新面板應該很快處理這個問題。

+0

我以前肯定使用過更新面板,但我也發現updatepanel會在用戶體驗上造成一點滯後。這並不是說Ajax不是答案,但AJAX Toolkit並不總能滿足我的需求。 – Mayo 2010-03-26 14:56:59