从usercontrol加载主页面中的控件

时间:2013-08-23 19:53:04

标签: c# asp.net

我有一个独特的问题。我正在开发.net解决方案,我无法访问主aspx页面。主要是,我不能修改它们中的任何一个。我正在构建一大堆用户控件,这些用户控件将在各种.aspx页面上使用。我想使用updatepanel,并且知道它需要scriptmanager控件在页面上。

所以 - 我有权访问的是.aspx页面上的占位符。我想要尝试做的是将scriptmanager控件放在这个占位符中。我已经知道如何执行此操作,方法是获取对上下文页面的引用,然后在其中添加控件。但是,我的时机问题。我在.ascx控件上有updatepanel,并且我在控件的Page_PreLoad事件中加载了scriptmanager。这似乎不起作用,因为它抱怨“'具有ID'updUsers'的控件需要页面上的ScriptManager。ScriptManager必须出现在任何需要它的控件之前。”很明显,updatepanel是在Page_Preload事件之前加载的。

问题是,我可以使用什么方法来加载控件?这可以完成吗?有更好的方法吗?

修改

我几乎尝试了所有活动:

protected void Page_PreInit(object sender, EventArgs e)
protected override void OnInit(EventArgs e)

详情

为了澄清,这就是usercontrol代码的样子:

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)
        {

        }
    }

SOMEWHAT正在编辑

我能够通过附加到updatepanel init来使其部分工作,所以我知道我添加scriptmanager的方式是有效的,所以我想我只是错过了要附加到的右页事件。

1 个答案:

答案 0 :(得分:0)

如果在UserControl中使用ScriptManager很简单 - 您可以使用ScriptManagerProxy。

这样所有的AJAX控件都可以编译运行,并且不会与主页的ScriptManager冲突

只需在控制标记中声明它,例如

<%@ Control Language="CSharp" AutoEventWireup="false" CodeFile="MyControl.cs" Inherits="MyControl" %>

<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
    <Services>

    </Services>
    <Scripts>

    </Scripts>
</asp:ScriptManagerProxy>