我有一个独特的问题。我正在开发一个.net 解决方案,我无法访问主要的 aspx 页面。主要是,我不能修改它们中的任何一个。我正在构建一大堆用户控件,它们将用于各种 .aspx 页面。我想使用更新面板,并且知道它需要脚本管理器控件位于页面上。
所以 - 我可以访问的是 .aspx 页面上的占位符。我想要尝试做的是将脚本管理器控件放在这个占位符中。我已经知道如何做到这一点,方法是获取对上下文页面的引用,然后在其中添加一个控件。但是,我遇到了时间问题。我在 .ascx 控件上有更新面板,并且在控件的 Page_PreLoad 事件中加载了脚本管理器。这似乎不起作用,因为它抱怨“'ID 为 'updUsers' 的控件需要页面上的 ScriptManager。ScriptManager 必须出现在任何需要它的控件之前。” 很明显,更新面板是在 Page_Preload 事件之前加载的。
问题是,我到底可以使用什么方法来加载控件?这完全可以做到吗?有一个更好的方法吗?
编辑:
我已经尝试了几乎所有的事件:
protected void Page_PreInit(object sender, EventArgs e)
protected override void OnInit(EventArgs e)
细节
澄清一下,这是用户控件代码的样子:
public partial class PollModule : ModuleBase
{
protected override void OnInit(EventArgs e)
{
Page page = HttpContext.Current.Handler as Page;
page.Init += delegate(object sender, EventArgs e_Init)
{
if (ScriptManager.GetCurrent(page) == null)
{
ScriptManager sMgr = new ScriptManager();
page.Form.Controls.AddAt(0, sMgr);
}
};
base.OnInit(e);
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
一些工作编辑
我能够通过附加到更新面板初始化来使其部分工作,所以我知道我添加脚本管理器的方式是有效的,所以我想我只是错过了要附加到的正确页面事件。