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" />