Javascript 在同一元素上调用c#然后调用js

Javascript 在同一元素上调用c#然后调用js,javascript,c#,Javascript,C#,我正在使用以下c从服务器端更改内容: this.StatusPreview.InnerHtml = "server side"; this.StatusPreview.Update(); 我正在使用以下js更改客户端的内容: document.getElementById('StatusPreview').innerHTML = "client side"; 如果我先执行js,就没有问题了。但是,如果我先执行c 35;,然后执行js,我会得到一个 Uncaught TypeError: Ca

我正在使用以下
c
从服务器端更改内容:

this.StatusPreview.InnerHtml = "server side";
this.StatusPreview.Update();
我正在使用以下
js
更改客户端的内容:

document.getElementById('StatusPreview').innerHTML = "client side";
如果我先执行
js
,就没有问题了。但是,如果我先执行
c 35;
,然后执行
js
,我会得到一个

Uncaught TypeError: Cannot set property 'innerHTML' of null 
js
行上

这是受影响的元素:

<td id="StatusPreview" runat="server"> </td>
有没有一种方法可以让我先更新
c
,而不必将元素
null


谢谢大家!

我不知道为什么
td
会变成
span
,但是javascript找不到它,因为ASP.NET的命名约定,默认情况下,它会将其父
INamingContainer
ID
添加到元素的
ClientID
。您可以通过将控件的设置为
Static
,使其设置为与
ID
相同来解决此问题:

<td id="StatusPreview" runat="server" ClientIDMode="static"> </td>

您可以使用

document.getElementById('<%= StatusPreview.ClientID %>').innerHTML = "client side";
document.getElementById(“”).innerHTML=“客户端”;

这将根据客户端的id更改状态预览的id。

由于您希望通过服务器端和客户端进行更新,您应该更改方法

将td标记保留为普通标记,并将标签添加为子标签:

<asp:Label ID="StatusPreview" runat="server" ClientIDMode="static" />


如果JavaScript首先更新它,它将找到元素。如果服务器端对其进行更新,那么当clientdmode设置为static时,它将不会更改ID,并且因为它已经是一个web控件,它不会创建新元素,因此JavaScript仍然可以找到它。

在服务器端代码中,添加:this.StatusPreview.clientdmode=System.web.UI.clientdmode.static;这将告诉asp.net保持ID不变,而不是重命名它。我通常在页面上的控件中使用它,但在服务器端没有使用它,但是它应该可以工作。@CMKanode`this.StatusPreview.clientdmode=System.Web.UI.clientdmode.Static`没有阻止元素被重命名。我错过了创建新元素的部分。这给了我同样的
在第一次尝试调用
js
时无法设置null
异常的属性'innerHTML'
clientdmode
static
但是这并没有改变任何事情,我仍然得到相同的错误。ID仍然被重命名。好主意!我在
c#
中使用了
this.StatusPreview.Text
,而不是
InnerHtml
,它就像一个魔咒!非常感谢。
<asp:Label ID="StatusPreview" runat="server" ClientIDMode="static" />