2015-01-26 110 views
3

将ASPX页面转换为控制器(ASCX)时出现问题。我的JavaScript没有找到隐藏的div中的文本框,也没有触发onclick事件。然而,它在ASPX页面中工作得很好。将aspx页面转换为WebUserControl

我的JavaScript ..

function FireEditClickButton() { 
     document.getElementById("btnFireEdit").click(); 
    } 

它应该与这个JavaScript

function GetSelection() { 
     var c = document.getElementById("tbRA"); 
     c.innerText = checkListBox.GetSelectedValues(); 
     UpdateText(); 
    } 
火这个按钮是一个隐藏的DIV开发的下一个沿)

<asp:Button ID="btnFireEdit" runat="server" OnClick="btnFireEdit_Click" /> 

然后

每次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?

由于

回答

1

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

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

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

(注意,这两条线的第二个,如果JavaScript是用户控件本身的一部分才有效。它不会工作,如果JavaScript是在外部.js文件或父页)

或使用的ClientIDMode属性并将值设置为Static。这将使渲染HTML使用id="btnFireEdit" ...

<asp:Button ID="btnFireEdit" runat="server" OnClick="btnFireEdit_Click" 
    ClientIDMode="Static" /> 
+0

谢谢主席先生! :) – Chris 2015-01-26 19:14:23

+1

不客气@Chris - 与您的其他项目祝好运 – freefaller 2015-01-26 19:15:46

1

当使用(嵌套中的主页或页)嵌套控件,默认情况下在客户端的ID会比服务器上的不同。 ASP.NET默认会这样做,以帮助确保客户端上的所有ID都是唯一的。但是,您可以使用以下两种方法之一来防止此情况。

第一个选项是将ClientIDMode更改为静态。您可以在控件,页面,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,那么您的客户端代码将在运行时失败。在编译时失败比运行时更好。

+0

感谢您的意见,解释和帮助,freefaller得到它虽然第一;) – Chris 2015-01-26 19:13:07