1

我在 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 方法中:

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

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

我已经多次搜索互联网,包括 StackOverflow 都没有成功。有没有人有任何想法?是否有一些 ScriptManager 属性可以在监视窗口中检查,这可能会给我提供线索?

感谢您的任何想法...

4

2 回答 2

2

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

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

于 2011-01-27T22:09:33.693 回答
2

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

于 2011-02-01T02:01:28.990 回答