[英]Converting aspx page to WebUserControl
我在将ASPX页面转换为控制器(ASCX)时遇到了问题。 我的JavaScript没有在隐藏的div中找到文本框,也没有触发onclick事件。 但是它在ASPX页面中运行得非常好。
我的JavaScript是......
function FireEditClickButton() {
document.getElementById("btnFireEdit").click();
}
它应该发射这个隐藏div中的按钮以及下一个部分)
<asp:Button ID="btnFireEdit" runat="server" OnClick="btnFireEdit_Click" />
然后用这个JavaScript
function GetSelection() {
var c = document.getElementById("tbRA");
c.innerText = checkListBox.GetSelectedValues();
UpdateText();
}
每次checklistbox都有值时调用。
这两个错误都说它们是null,但它们就在隐藏的div中
<div style="visibility: hidden">
<asp:TextBox ID="tbRA" runat="server"></asp:TextBox>
<asp:Button ID="btnFireEdit" runat="server" OnClick="btnFireEdit_Click" />
</div>
那么为什么会发生这种情况,因为它在ASPX页面中完全正常? 是否与WebUserControl不使用表单标签有关?
谢谢
使用嵌套控件(或嵌套在母版页中的页面)时,默认情况下,客户端上的ID将与服务器上的ID不同。 ASP.NET默认执行此操作以帮助确保客户端上的所有ID都是唯一的。 但是,您可以使用以下两种方法之一来防止这种情况。
第一个选项是将ClientIDMode更改为静态。 您可以在control,page,web.config或machine.config级别执行此操作。 web.config技术如下所示。 然后,客户端上的ID将与服务器上的ID匹配。
<configuration>
<system.web>
<pages clientIDMode="static" />
</system.Web>
</configuration>
第二个选项是使用内联C#代码将ID嵌入到JavaScript中,但这仅在JavaScript嵌入ASP.NET页面或控件而不是单独的脚本文件中时才有效。 将评估C#表达式,因此客户端上的ID将嵌入到JavaScript中。
document.getElementById('<%= btnFireEdit.ClientId %>');
还有第三种选择,那就是弄清楚客户端上的ID是什么,然后手动将它放在JavaScript中,如下所示:
document.getElementById("myctrlname_btnFireEdit").click();
但是,这是个坏主意。 如果您曾经重命名myctrlname
或btnFireEdit
那么您的客户端代码将在运行时失败。 在编译时失败比运行时更好。
你的javascript找不到按钮,因为在呈现的HTML中它不再具有id="btnFireEdit"
,而是基于usercontrol名称的id="myctrlname_btnFireEdit"
(例如id="myctrlname_btnFireEdit"
)。
你有两个选择...要么更新javascript以包含usercontrol的名称...
document.getElementById("myctrlname_btnFireEdit").click();
document.getElementById("<%=btnFireEdit.ClientID%>").click();
(注意,这两行中的第二行只有在javascript是usercontrol本身的一部分时才有效。如果javascript在外部.js
文件或父页面中,它将无法工作)
或者使用<asp:Button>
的ClientIDMode
属性并将值设置为Static
。 这将使渲染的HTML使用id="btnFireEdit"
...
<asp:Button ID="btnFireEdit" runat="server" OnClick="btnFireEdit_Click"
ClientIDMode="Static" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.