在同一个元素上调用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

谢谢!

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

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

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

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

如果JavaScript首先更新它,它会找到元素。如果服务器端更新它,那么在ClientIDMode设置为static的情况下,它不会更改ID,并且由于它已经是一个web控件,它不会创建新的元素,因此JavaScript仍然可以找到它。

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

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

您可以使用

document.getElementById('<%= StatusPreview.ClientID %>').innerHTML = "client side";

这将根据客户端的id更改StatusPreview的id。