从JavaScript设置runat =“server”

有没有办法从客户端JavaScript设置runat属性? 我需要在加载页面后向表中添加行,并且我需要将其单元格的数据提供给服务器。 我可以使第一行(几个) runat="server" ,但我不知道用户想要多少行,所以这不只是添加一堆隐藏的行并显示当用户点击“添加新行”时它们。

我可以想到几种方法来做到这一点:

  1. 每次用户单击“添加新行”按钮时回发到页面,并在服务器上处理runat属性而不是JavaScript / jQuery。我不想这样做,但因为它似乎是唯一的万无一失的方式,我可能不得不这样做。

  2. 使用jQuery将runat="server"添加到单元格,然后在下次进行回发时引用它们,但当前对它们不做任何操作。 这对我来说是理想的解决方案,但我不确定ASP.NET是否以这种方式工作。 考虑到WebForms是在JavaScript开发人员解决了我们可以在页面加载后向页面添加元素的想法之后创建的 ,我并没有屏住呼吸。

  3. table或者tbody一个runat属性,然后以某种方式引用它的子。 这也比#1好,但我也不确定如何做到这一点,或者即使它确实可以完成。

这是我想要做的简化版本:

 
Some Content

以及jQuery的简化版本:

 $("#").on("click", ".this_table_button", function() { $("").append(" Some Content   ); }); 

这没有任何意义,因为在发页面时,对DOM的更改不会被推回到服务器。 添加对浏览器毫无意义的属性(例如runat )将不会产生任何影响。 即使您的表设置为runat="server"runat="server"也不会检测到该表的客户端更改。

选项#1(每次添加新行时回发)可能是最简单的方法,基本上是自1.0版本以来ASP.NET(在web-apps开始流行之前)的设计

要获得更加动态的体验,您需要做的是在本地存储客户端更改,然后通过标准表单元素(例如隐藏的输入字段)将它们发布回服务器。 您可以

元素添加任意数量的隐藏字段,并使用Request对象在服务器上读取它们。 或者,您可以通过JSON或XML序列化新行数据。 如果您只是想在数据库中保存新行,可能会实现一个Save按钮,通过AJAX将一个新行发送到服务器并立即保存。

 runat="server" 

…是服务器指令参数,对浏览器没有任何意义。 在将页面呈现为HTML并将其发送到客户端浏览器之前,服务器将基于此指令的任何方法连接起来。 当JS可以对元素进行更改,并设置runat="server" ,服务器将无法接收该指令。