用户控件回发在更新面板中不起作用

发布于 2024-08-08 10:12:23 字数 2087 浏览 2 评论 0原文

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

<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 的占位符中。

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

我做错了什么?


更新

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

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


}

I have a masterpage with an update panel:

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

Then I have Default.aspx page which uses the masterpage file:

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

I programmatically load usercontrols into the placeholder with id plhCurrentItem.

The problem is when I click a button in the usercontrol, no event fires. The usercontrol just disappears and the updatepanel is left blank.

What am I doing wrong?


Update

Code used to add usercontrols. The LoadControls method is called from the Page_load event.

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


}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

沧笙踏歌 2024-08-15 10:12:23

将 LoadControls 调用放入 OnPreInt 页面生命周期中的事件:

将此事件用于以下目的:

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

Put LoadControls call in the OnPreInt event from the page life-cycle:

Use this event for the following:

  • Check the IsPostBack property to determine whether this is the first time the page is being processed.
  • Create or re-create dynamic controls.
  • Set a master page dynamically.
  • Set the Theme property dynamically.
  • Read or set profile property values.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文