我正在使用以下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
在js
行上。
这是受影响的因素:
<td id="StatusPreview" runat="server"> </td>
当我执行c#
时,它将td
更改为
<span id="el_StatusPreview_container">asd</span>
有没有办法可以让我先更新c#
,而无需转动我的元素null
?
谢谢!
答案 0 :(得分:1)
由于您希望通过服务器端和客户端进行更新,因此您应该更改方法。
将td标记保留为普通标记,并将标记添加为子标记:
<asp:Label ID="StatusPreview" runat="server" ClientIDMode="static" />
如果JavaScript首先更新它,它将找到该元素。如果服务器端更新它,然后将ClientIDMode设置为静态,它将不会更改ID,因为它已经是Web控件,它不会创建新元素,因此JavaScript仍然可以找到它。
答案 1 :(得分:0)
我不知道为什么td
被转换为span
,但由于ASP.NET命名约定,javascript无法找到它,默认情况下它会添加{{1}它的父ID
到元素的INamingContainer
。您可以通过将控件的ClientIDMode
设置为ClientID
来解决此问题,以便将其设置为与Static
相同:
ID
答案 2 :(得分:0)
您可以使用
document.getElementById('<%= StatusPreview.ClientID %>').innerHTML = "client side";
这将根据客户端的ID更改 StatusPreview 的ID。