2010-03-26 55 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