将aspx页面转换为WebUserControl

时间:2015-01-26 18:52:52

标签: javascript asp.net 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都有值时,

会被调用。

这两个错误都说它们是空的,但它们就在隐藏的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有关,而不是使用表单标签?

由于

2 个答案:

答案 0 :(得分:1)

使用嵌套控件(或嵌套在母版页中的页面)时,默认情况下,客户端上的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();

然而,这是一个糟糕的想法。如果您重命名myctrlnamebtnFireEdit,那么您的客户端代码将在运行时失败。在编译时失败比运行时更好。

答案 1 :(得分:1)

您的javascript无法找到该按钮,因为在呈现的HTML中,它不再具有id="btnFireEdit",而是基于usercontrol名称的ID(例如id="myctrlname_btnFireEdit")。

您有两个选择...要么更新javascript以包含usercontrol的名称......

document.getElementById("myctrlname_btnFireEdit").click();
document.getElementById("<%=btnFireEdit.ClientID%>").click();

(注意,这两行中的第二行只有在javascript是usercontrol本身的一部分时才有效。如果javascript在外部.js文件或父页面中,它将不起作用

或使用ClientIDMode的{​​{1}}属性并将值设置为<asp:Button>。这将使呈现的HTML使用Static ...

id="btnFireEdit"