调用C#则相同的元素JS
我使用以下c#
改变从服务器端内容:调用C#则相同的元素JS
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
?
谢谢!
既然你想通过服务器端和客户端进行更新,你应该改变你的方法。
离开td标签作为一个普通的标签,并添加一个标签作为一个孩子:
<asp:Label ID="StatusPreview" runat="server" ClientIDMode="static" />
如果JavaScript的第一次更新,它会找到的元素。如果服务器端更新它,那么将ClientIDMode设置为静态,它不会更改ID,并且由于它已经是Web控件,因此它不会创建新元素,因此JavaScript仍然可以找到它。
绝妙的主意!我在'c#'中使用'this.StatusPreview.Text'而不是'InnerHtml',它就像一个魅力!谢谢! – starvator 2014-10-27 13:11:56
很高兴有帮助。 – 2014-10-27 13:54:22
我不知道为什么td
正在变成一个span
但JavaScript不能找到它,因为ASP.NET命名约定,默认情况下它会其父INamingContainer
的ID
增加的对ClientID
的元件。您可以通过设置控制的ClientIDMode
克服这个问题,Static
,所以它会被设置为相同的ID
:
<td id="StatusPreview" runat="server" ClientIDMode="static"> </td>
我将'ClientIdMode'设置为'static',但这并没有改变任何东西,我仍然得到相同的错误。该ID仍然被重命名。 – starvator 2014-10-27 12:51:14
您可以使用
document.getElementById('<%= StatusPreview.ClientID %>').innerHTML = "client side";
这将改变的ID StatusPreview根据客户端的ID。
这给了我第一次尝试调用'js'时不能设置属性'innerHTML'的null'异常。 – starvator 2014-10-27 12:48:05
在服务器端代码中,添加:this.StatusPreview.ClientIDMode = System.Web.UI.ClientIDMode.Static;这将告诉asp.net保持原样,而不是重命名它。我通常使用这个在页面上的控件,我没有用它在服务器端,但它应该工作。 – 2014-10-27 12:36:46
@CMKanode'this.StatusPreview.ClientIDMode = System.Web.UI.ClientIDMode.Static'并未阻止元素被重命名 – starvator 2014-10-27 12:52:06
我错过了创建新元素的部分。 – 2014-10-27 13:03:39