在同一个元素上调用c#然后调用js
本文关键字:调用 js 然后 同一个 元素 | 更新日期: 2023-09-27 18:28:07
我正在使用以下c#
更改服务器端的内容:
this.StatusPreview.InnerHtml = "server side";
this.StatusPreview.Update();
我正在使用以下js
更改客户端的内容:
document.getElementById('StatusPreview').innerHTML = "client side";
如果我先执行js
,就没有问题。然而,如果我先执行c#
,然后执行js
,我会得到一个
Uncaught TypeError: Cannot set property 'innerHTML' of null
在CCD_ 6线上。
这是受影响的元素:
<td id="StatusPreview" runat="server"> </td>
当我执行c#
时,它将td
更改为
<span id="el_StatusPreview_container">asd</span>
有没有一种方法可以让我先更新c#
,而不转动我的元素null
?
谢谢!
由于您希望通过服务器端和客户端进行更新,因此应该更改方法。
将td标签保留为普通标签,并添加一个子标签:
<asp:Label ID="StatusPreview" runat="server" ClientIDMode="static" />
如果JavaScript首先更新它,它会找到元素。如果服务器端更新它,那么在ClientIDMode设置为static的情况下,它不会更改ID,并且由于它已经是一个web控件,它不会创建新的元素,因此JavaScript仍然可以找到它。
我不知道为什么td
会变成span
,但javascript找不到它,因为ASP.NET命名约定,默认情况下,它会将其父INamingContainer
的ID
添加到元素的ClientID
中。您可以通过将控件的ClientIDMode
设置为Static
来绕过此问题,这样它将被设置为与ID
:相同
<td id="StatusPreview" runat="server" ClientIDMode="static"> </td>
您可以使用
document.getElementById('<%= StatusPreview.ClientID %>').innerHTML = "client side";
这将根据客户端的id更改StatusPreview的id。