我试图以编程的方式添加一个ScriptManager控件,但前提是页面上不存在一个控件。为此,我找到了许多将逻辑放在Page_Init中的示例,这是有意义的(从那时起就意识到它没有意义--参见底部编辑),但是在Init方法被击中之前,我得到了一个异常。
protected void Page_Init(object sender, EventArgs e)
{
if (ScriptManager.GetCurrent(Page) == null)
{
ScriptManager sMgr = new ScriptManager();
Page.Form.Controls.AddAt(0, sMgr);
}
}这让我觉得塞特奥尔在某种程度上妨碍了我。有人用塞特罗成功地做到了这一点吗?
谢谢。
编辑:我收到的异常如下:“带有ID 'filtersUpdatePanel‘的控件需要页面上的ScriptManager。ScriptManager必须出现在任何需要它的控件之前。”
编辑^2:这里真正发生的事情是,Page_Init在生命周期中太晚了,无法附加ScriptManager (在我的例子中)。使用Init,首先触发所有子事件,然后触发Page。UpdatePanel的init没有看到一个ScriptManager,所以它抛出了一个异常。将ScriptManager逻辑放入UpdatePanel init解决了这个问题。
发布于 2012-03-08 10:04:14
我通常做的是在我的基本布局中创建一个PlaceHolder控件。然后在我的Page_Init (或需要ScriptManager的控件的Init中,如UpdatePanel)中放置以下代码:
if (ScriptManager.GetCurrent(this.Page) == null)
{
ScriptManager scriptManager = new ScriptManager
{
ID = String.Concat("ScriptManager", DateTime.Now.Date.Ticks),
EnablePartialRendering = true,
ScriptMode = ScriptMode.Release
};
var placeholder = this.Page.FindControl("PlaceHolderScriptManager") as PlaceHolder;
if (placeholder != null)
{
placeholder.Controls.Add(scriptManager);
}
}我在没有测试的情况下对它做了一些修改,但是它应该工作得很好。
https://stackoverflow.com/questions/9607665
复制相似问题