我有一个aspx页面,它由3个用户控件(ascx)组成。我有一个更新面板包装3个用户控件,如下所示:
<asp:UpdatePanel ID="UpdatePanelWrapper" runat="server">
<ContentTemplate>
<uc1:UserControl1 ID="UserControl1" runat="server" />
<uc2:UserControl2 ID="UserControl2" runat="server"/>
<uc2:UserControl3 ID="UserControl3" runat="server"/>
</ContentTemplate>
</asp:UpdatePanel>
我单独显示每个用户控件,因此当显示“UserControl1”时,其他2个用户控件将被隐藏。
在“UserControl1”里面我有一些asp控件和一些javascript函数。我的问题是,当刷新“UpdatePanelWrapper”时,永远不会调用这些javascript函数。
我已尝试过此解决方案http://blog.dreamlabsolutions.com/post/2009/02/24/jQuery-document-ready-and-ASP-NET-Ajax-asynchronous-postback.aspx,在“UserControl1”中添加了javascript调用,但它无效。只有当我在aspx页面中添加javascript调用但不在“UserControl1”中添加时,我才能使用它。
任何帮助将不胜感激,谢谢。
答案 0 :(得分:11)
这是你怎么做的....
<script type="text/javascript">
Sys.Application.add_init(appl_init);
function appl_init() {
var pgRegMgr = Sys.WebForms.PageRequestManager.getInstance();
pgRegMgr.add_endRequest(EndHandler);
}
function EndHandler() {
// This will be called whenever your updatepanel update
// It will be trigger after the update updatepanel
//add your javascript here
}
</script>
答案 1 :(得分:1)
你可以使用
<强> Sys.Application.add_load(WireEvents); //修复.NET ajax updatepanel的接线
像
<script language="javascript" type="text/javascript">
// <![CDATA[
Sys.Application.add_load(WireEvents); // fix wiring for .NET ajax updatepanel
$(WireEvents); // handle page load wiring using jquery. This will fire on page load
function WireEvents() {
//do stuff here
};
// ]]>
</script>
哦,还有一件事。请注意功能名称。否则它会变得一团糟。
试试这样的事情
<script language="javascript" type="text/javascript">
// <![CDATA[
Sys.Application.add_load(WireEvents_<%=this.ID%>); // fix wiring for .NET ajax updatepanel
$(WireEvents_<%=this.ID%>); // handle page load wiring
function WireEvents_<%=this.ID%>() {
};// end WireEvents_
// ]]>
</script>
所以基本上将_<%=this.ID%>
添加到funciton名称可确保控件的每个实例都调用它自己的函数。假设您可以拥有控件的多个实例。如果不是,它至少可以防止在为不同控件调用wireevents时产生混淆
答案 2 :(得分:1)
不评估UpdatePanel响应中返回的脚本。如果我理解正确,您可以执行一些在UpdatePanel视图中返回的脚本操作。
如果是,我在这里回答了这个问题:
答案 3 :(得分:0)
理想情况下,您的所有JavaScript都应该在结束</body>
标记之前位于页面底部。
如果您使用的是jQuery,则需要使用 live() 或 delegate() 来确保这些事件处理程序冒泡,即使页面会刷新。