我在 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 属性可以在监视窗口中检查,这可能会给我提供线索?
感谢您的任何想法...