2009-11-10 61 views
3

我有一个更新面板,其中包含一个表格,我在其中添加按钮点击上的控件行。其中一个添加的控件是用户控件,它是一个日期选择器。在该用户控件的内部,我有一个文本框,并且我有JQuery,它将JQuery UI DatePicker插件应用于它,从而将它变成日期选择器。这不是一个问题,如果该用户控件是动态加载到一个页面,但是,如果它是在更新面板内的异步回发完成,JavaScript不会触发,因此文本框呈现,但没有所有的jQuery日期选择器功能。下面是一些代码是这样的DatePicker.ascx内:如何让JavaScript在更新面板中执行

$(function() { 
     //reset the localization 
     $.datepicker.setDefaults($.extend($.datepicker.regional[''])); 
     $("#<%=txtDate.ClientID%>").datepicker({ dateFormat: 'mm/dd/yy', showOn: 'button', buttonImage: '/images/calendar.gif', buttonImageOnly: true, altField: '#<%=txtDate.ClientID%>' }); 

}

所以,当控制动态加载上的异步回发这个jQuery不会触发。那我该如何做这项工作?

回答

1

当您在响应中呈现脚本时,它会执行以下操作:呈现脚本。在页面呈现期间,脚本首先被渲染,并且在执行代码时已经发生。

微软为此提出了一个解决方案,即通过ScriptManager.RegisterClientScriptBlock注册脚本块,然后ScriptManager将会看到脚本在页面加载后执行。

根据您的情况,这可能会也可能不会有所帮助。或者,在中间环节:只有一些解决方法才有帮助。从你的评论,我能想到的一个解决办法,我可能使用已经考虑:

添加GetClientScript方法您的用户控件,在返回的JavaScript。如果UserControl在常规页面加载时加载,则可以在当前呈现脚本的位置调用该方法。如果该控件在UpdatePanel回发中加载,则可以使用该方法从控件中获取scriptbody,并将其注册到ScriptManager中。在这种情况下,您应该将参数传递回UserControl 而不是,以便在通常情况下再次注册该脚本。

+0

我该怎么做?该脚本是用户控件的一部分,可能并不总是通过更新面板和脚本管理器加载到页面中。 – Riz 2009-11-10 17:50:08

+0

我完全编辑了我的回复以适应您的请求。希望有帮助 – 2009-11-10 18:27:07

+0

是的,谢谢,我想我必须这样做。 Web开发仍然像以往一样糟糕。我希望事情能够一起发挥。 – Riz 2009-11-10 19:44:48

0

DatePicker.ascx是否在初始加载期间将该JavaScript插入页面顶部?然后该函数失败,因为datepicker尚未加载。然后,您将日期选择器加载到更新面板中,但该函数未被调用。

2

Check this Page 寻找DatePicker上的会话 它说ASP.NET AJAX UpdatePanel的抹布DOM,所以加载不会触发。 该帖子说,你可以使用EndRequest处理程序或pageLoad快捷方式,但是我想如果你只是不能注册与ScriptManager的JavaScript。

希望这会有所帮助。

+0

谢谢,但pageLoad方法将无法正常工作,因为我的JavaScript是用户控件的一部分,并且用户控件在updatepanel中加载。感谢信息,但非常有趣。 – Riz 2009-11-10 19:43:51