在相同的元素上调用c#然后js

时间:2014-10-27 12:25:32

标签: javascript c#

我正在使用以下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

谢谢!

3 个答案:

答案 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。