如何通过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 = $("
").attr("action", "some/path/on/server") .attr("method", "post"); // Make a form field with your tableData (JSON serialized in this case) var tableInput = $("").attr("type", "hidden") .attr("value", JSON.stringify(tableData)); // Some browsers require the form to be in the dom before it'll submit. $(document.body).append(form); // Add the field to the form and submit form.append(tableInput).submit();

这是这个答案的基本实现。

通过将表和按钮放在更新面板中,并在按钮单击事件中追加行,您始终可以使用AJAX进行模拟。

对于客户端,asp:table和table之间没有区别。 他们是一样的。 要真正回答这个问题,我们必须考虑服务器端的内容,因为这是asp:table和table之间的区别所在。

创建asp:table时,您可能会绑定某些数据。 服务器认为表将改变的唯一方法是数据是否发生变化。 这就是你需要改变你的表格的地方,改变它的结合方式。 如果更改表客户端,则需要在服务器端镜像这些更改。 我不确定您的数据和表格是如何设置的,但有很多方法可以完成。

最简单的是,您可以“回发”元素中的新行,当您处理asp:table服务器端时,检查将要回发的数据并添加适当的行。

或者,如果您可以更改绑定表的数据,也可以这样做。