使用ScriptManager.RegisterStartupScript注册的启动脚本不会呈现给页面

时间:2011-01-27 21:55:12

标签: c# asp.net updatepanel scriptmanager ajax.net

我在ASP.NET 3.5中调用了ScriptManager.RegisterStartupScript,但没有呈现给页面,我无法弄清楚原因:

System.Web.UI.ScriptManager.RegisterStartupScript( Page
                                                 , typeof(ListControlBase)
                                                 , "ShowPopup_" + ClientID
                                                 , "alert(\"HI\");"
                                                 , true );

上述调用位于基类(ListControlBase)中的按钮处理程序内,该基类由具有UpdatePanel(列表管理器控件)的用户控件进行子类处理。此用户控件用于管理在UpdatePanel中的PlaceHolder中动态添加,更新或删除的另一个用户控件(列表项控件)的1到n个副本的列表。为了测试我已经尝试添加列表项控件的1和2个副本。

列表管理器控件使用LoadControl(带有ascx路径的重载)进行实例化,并添加到控件中的PlaceHolder,表示我正在创建的完整表单。到目前为止,Web应用程序项目中存在所有控件。然后将完整的表单控件添加到页面对象中的PlaceHolder中,该对象存在于父网站项目中,再次使用LoadControl(与上面相同的重载)进行实例化。

如果我取出UpdatePanel,对RegisterStartupScript的调用会导致启动scxript按预期呈现。

保留UpdatePanel,我已经使用调试器确保脚本确实在ScriptManager中注册,在Web应用程序项目中调用RegisterStartupScript之后立即和主项目中页面的OnPreRender方法中:

进入QuickWatch:((System.Web.UI.ScriptManager)(Page.ScriptManager))._scriptRegistration._startupScriptBlocks

正如我所说的,当从Web应用程序项目和网站项目调试时,我可以在QuickWatch中看到已注册的启动脚本,但是它没有呈现给我使用Firebug检查过的页面。 / p>

我已经多次搜索互联网,包括StackOverflow,但没有成功。有没有人有任何想法?是否有一些ScriptManager属性,我可以在监视窗口中检查,这可能会让我对此有所了解?

感谢任何想法...

2 个答案:

答案 0 :(得分:2)

查看带有Control的RegisterStartupScript的重载版本: MSDN: ScriptManager.RegisterStartupScript Method (Control, Type, String, String, Boolean)

使用ScriptManager控件为UpdatePanel内的控件注册启动脚本块,并将脚本块添加到页面。

答案 1 :(得分:2)

正如Will所暗示的,这可能是IIS的一个发展问题。重新启动机器后它就消失了。