如何通过Javascript将表行添加到ASP.NET中的服务器?
之前已经问过这个问题: 在asp.net webform中通过javascript添加访问表行 。 对重复的问题道歉,但我真的想解释为什么会这样。 这可能是由于我对浏览器在提交到服务器时如何处理HTML表格缺乏了解。
如果我在aspx页面上有一个表或控件,并且我使用JQuery / Javascript在客户端添加行,为什么我不能在回发后的服务器中添加这些添加的行?
我一直试图让这个工作,看起来我不能根据前一个问题的答案做到这一点。 但有人可以解释为什么会这样吗? 表本身可以在post-back中返回,但是唯一存在的行是在最初发送到浏览器时作为表的一部分的行 – 它不包括浏览器添加的行。
我原本以为有一种方法可以在回发中包含这些新行,就像任何客户端用户输入一样?
对服务器执行POST操作时,仅包含发布的
元素所包含的值。 它们被序列化为键/值对,可以使用FireBug和Chrome开发者工具等工具进行检查。
常规HTML元素不会发送回服务器。 我的意思是像
或
元素之类的东西不会返回到服务器,只返回表单的值。
不幸的是,ASP.Net隐藏了很多这些细节。 这太神奇了! 这既是好事也是坏事。 它让人很容易无所事事地无知HTTP如何在幕后工作的细节,但当你真的需要知道这些细节时,它可能是痛苦的根源。
你可以这样做:
// Get the data from your table into an array var tableData = []; $("table tr.some-class").each(function () { var row = []; $(this).find("td").each(function () { row.push(this.innerHTML); }); tableData.push(row); }); // Make your form var form = $("
这是这个答案的基本实现。
通过将表和按钮放在更新面板中,并在按钮单击事件中追加行,您始终可以使用AJAX进行模拟。
对于客户端,asp:table和table之间没有区别。 他们是一样的。 要真正回答这个问题,我们必须考虑服务器端的内容,因为这是asp:table和table之间的区别所在。
创建asp:table时,您可能会绑定某些数据。 服务器认为表将改变的唯一方法是数据是否发生变化。 这就是你需要改变你的表格的地方,改变它的结合方式。 如果更改表客户端,则需要在服务器端镜像这些更改。 我不确定您的数据和表格是如何设置的,但有很多方法可以完成。
最简单的是,您可以“回发”元素中的新行,当您处理asp:table服务器端时,检查将要回发的数据并添加适当的行。
或者,如果您可以更改绑定表的数据,也可以这样做。