有没有一种方法可以从客户端JavaScript设置runat
属性?页面加载后,我需要向表中添加行,并且需要使服务器的单元格数据可用。我可以将第一行(几行)设为runat="server"
,但是我不知道用户想要多少行,所以这不仅仅是添加一堆隐藏行并在何时显示它们的问题。用户则单击“添加新行”。
我可以想到几种方法来做到这一点:
每次用户单击“添加新行”按钮时回发到页面,并在服务器上而不是JavaScript / jQuery中处理服务器上的runat
属性。我不想这样做,但似乎唯一当然,我可能必须这样做。
使用jQuery将runat="server"
添加到单元格中,然后在下次执行回发时引用它们,但是当前不对其进行任何处理。这对我来说是理想的解决方案,但是我不确定ASP.NET是否以这种方式工作。考虑到WebForms是在JavaScript开发人员下手之前创建的,因此我们可以在页面加载后向页面中添加元素,这一点我没有屏息。
给table
或tbody
赋予runat
属性,然后以某种方式引用其子级。这也将比#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>
以及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>
);
});
最佳答案
这没有任何意义,因为在页面回发时,不会将对DOM的更改回推回服务器。向浏览器添加绝对没有意义的属性(例如runat
)不会有任何效果。即使您将表设置为runat="server"
,服务器也不会检测到对该表的客户端更改。
选项#1(每次添加新行时回发)可能是最简单的方法,并且基本上是ASP.NET从1.0版开始设计的功能(在Web应用变得流行之前)
为了获得更动态的体验,您需要做的是在本地存储客户端更改,然后通过标准表单元素(例如隐藏的输入字段)将其发布回服务器。您可以将任意数量的隐藏字段添加到<form>
元素,并使用Request
对象在服务器上读取它们。或者,您也许可以通过JSON或XML序列化新行数据。如果您只是想在数据库中保存新行,则可以实现“保存”按钮,该按钮通过AJAX将单个新行发送到服务器并立即保存。
关于c# - 从JavaScript设置runat =“server”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24641804/