javascript 函数可以修改在 ASP.NET 中的服务器上运行的元素吗?

Posted

技术标签:

【中文标题】javascript 函数可以修改在 ASP.NET 中的服务器上运行的元素吗?【英文标题】:Can a javascript function modify an element that is running on server in ASP.NET? 【发布时间】:2013-04-19 20:47:47 【问题描述】:

为了测试,我创建了一个按钮,当点击该按钮时会隐藏一个文本框。按下按钮的 javascript 如下所示:

function showCommentBox() 
    var el = document.getElementById('replyBox');
    el.setAttribute("style", "display:none;");
    return false;

asp 代码如下:

<textarea  id="replyBox" runat="server" class="replyBox"></textarea>
<asp:Button runat="server" id="replyBtn" onClientClick="return showCommentBox();" class="replyBtnClass" Font-Bold="true" Text="Reply"/>

似乎每当我尝试修改服务器上运行的元素时,都会导致回发。我的逻辑有问题还是这不可能?

【问题讨论】:

【参考方案1】:

如果您查看生成的服务器控件 id,您会发现它与您设置的不同。您设置的 id 是代码隐藏 ID。呈现页面时,将为元素分配其ClientID。这就是您遇到问题的原因。

你有两个选择:

    ClientIDMode 设置为“静态”。这会将元素的 id 保留为您设置的内容。确保仅当您只有一个具有此 ID 的元素时才执行此操作。否则你的 javascript 会开始奇怪。

    动态设置 javascript 的 id。像这样:

    document.getElementById('&lt;% replyBox.ClientID %&gt;');

这会将呈现的服务器控件的 ClientID 直接注入 javascript。注意:这仅适用于 javascript 在 aspx 页面中。如果将 javascript 移动到 js 文件中,这将不起作用。

【讨论】:

效果很好。还有很多我不知道的信息谢谢。 很高兴为您提供帮助。你实现了哪种方法? 我使用了 ClientIDMode 一段时间,直到我意识到最好用 div 标签封装盒子和其他东西,然后一次性隐藏所有内容。如果我一开始就走那条路,我不会发现这些东西,但再次感谢。【参考方案2】:

在您的情况下,此行将返回 undefined

var el = document.getElementById('replyBox');

当您使用replyBox 作为具有runat="server" 属性的textarea 的ID 时。您需要在函数中使用ClientIdMode="Static" 或引用ClientId 的textarea,如下所示

document.getElementById('<% replyBox.ClientID %>');

【讨论】:

以上是关于javascript 函数可以修改在 ASP.NET 中的服务器上运行的元素吗?的主要内容,如果未能解决你的问题,请参考以下文章

win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:WindowsMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NE

javaScript----------(函数)

JavaScript闭包

在 asp.net 和 Join 语句中连接到 Access 数据库

Javascript的参数详解

JavaScript作用域