从JavaScript设置runat ="server"

try*_*sis 1 javascript c# asp.net jquery webforms

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

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

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

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

  3. 给予table或可能tbodyrunat属性,然后参照其子不知何故.这也比#1好,但我也不确定如何做到这一点,或者即使它确实可以做到.

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

<table runat="server" id="this_table">
    <tbody runat="server" id="this_table_body">
        <tr>
            <td class="this_table_cell">Some Content</td>
            <td><button type="button" class="this_table_button">Please click this button</button>
        </tr>
    </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

以及jQuery的简化版本:

$("#<%=this_table_body.ClientID%>").on("click", ".this_table_button", function() {
    $("<%=this_table_body.ClientID%>").append("<tr>
            <td class="this_table_cell">Some Content</td>
            <td><button type="button" class="this_table_button">Please click this button</button>
        </tr>
    );
});
Run Code Online (Sandbox Code Playgroud)

Mik*_*sen 5

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

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

要获得更加动态的体验,您需要做的是在本地存储客户端更改,然后通过标准表单元素(例如隐藏的输入字段)将它们发布回服务器.您可以<form>元素添加任意数量的隐藏字段,并使用该Request对象在服务器上读取它们.或者,您也许可以通过JSON或XML序列化新行数据.如果您只是想在数据库中保存新行,可能会实现一个Save按钮,通过AJAX将一个新行发送到服务器并立即保存.