【问题标题】:Usercontrol postback not working in updatepanel用户控件回发在更新面板中不起作用
【发布时间】:2009-10-19 15:42:36
【问题描述】:

我有一个带有更新面板的母版页:

<asp:UpdatePanel ID="UpdatePanel" runat="server" ChildrenAsTriggers="true" EnableViewState="False"
                UpdateMode="Conditional">
                <ContentTemplate>
                    <div id="mainContent">
                        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
                        </asp:ContentPlaceHolder>
                    </div>
                </ContentTemplate>
                <Triggers>
              </Triggers>
            </asp:UpdatePanel>

然后我有使用母版页文件的 Default.aspx 页面:

<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
<asp:PlaceHolder ID="plhCurrentItem" runat="server"></asp:PlaceHolder>
</asp:Content>

我以编程方式将用户控件加载到 ID 为 plhCurrentItem 的占位符中。

问题是当我单击用户控件中的按钮时,没有触发任何事件。用户控件消失,更新面板留空。

我做错了什么?


更新

用于添加用户控件的代码。从 Page_load 事件调用 LoadControls 方法。

 Control ctlCurrentItem = null;

public string currentControl
{
    get { return ((string)Session["currentControl"]); }
    set { Session["currentControl"] = value; }
}



public void LoadControls()
{
    switch (currentControl)
    {
        case "Home":
            ctlCurrentItem = Page.LoadControl("~/pages/Home.ascx");
            ctlCurrentItem.ID = "Home";
            break;
        case "Resume":
            ctlCurrentItem = Page.LoadControl("~/pages/Resume.ascx");
            ctlCurrentItem.ID = "Resume";
            break;
        case "Projects":
            ctlCurrentItem = Page.LoadControl("~/pages/Projects.ascx");
            ctlCurrentItem.ID = "Projects";
            break;
        case "Contact":
            ctlCurrentItem = Page.LoadControl("~/pages/Contact.ascx");
            ctlCurrentItem.ID = "Contact";
            break;
        default:
            return;

    }
    plhCurrentItem.Controls.Clear();
    plhCurrentItem.Controls.Add(ctlCurrentItem);


}

【问题讨论】:

  • 您如何以编程方式加载用户控件?哪个活动?
  • 啊,page_Load,跟着_rick_schott的回答。 :D
  • 这是否解决了您的问题?

标签: c# asp.net ajax updatepanel


【解决方案1】:

将 LoadControls 调用放入来自 page life-cycleOnPreInt 事件中:

将此事件用于以下目的:

  • 检查 IsPostBack 属性以确定这是否是第一次处理页面。
  • 创建或重新创建动态控件。
  • 动态设置母版页。
  • 动态设置 Theme 属性。
  • 读取或设置配置文件属性值。

【讨论】:

    猜你喜欢
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    相关资源
    最近更新 更多