首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式添加ScriptManager

以编程方式添加ScriptManager
EN

Stack Overflow用户
提问于 2012-03-07 19:18:00
回答 1查看 2.1K关注 0票数 0

我试图以编程的方式添加一个ScriptManager控件,但前提是页面上不存在一个控件。为此,我找到了许多将逻辑放在Page_Init中的示例,这是有意义的(从那时起就意识到它没有意义--参见底部编辑),但是在Init方法被击中之前,我得到了一个异常。

代码语言:javascript
复制
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解决了这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-08 10:04:14

我通常做的是在我的基本布局中创建一个PlaceHolder控件。然后在我的Page_Init (或需要ScriptManager的控件的Init中,如UpdatePanel)中放置以下代码:

代码语言:javascript
复制
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);
    }
}

我在没有测试的情况下对它做了一些修改,但是它应该工作得很好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9607665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档