UpdatePanel包裹在用户控件周围

时间:2010-01-28 19:29:56

标签: asp.net ajax updatepanel user-controls

我有一个用户控件,其中包含一些按钮和占位符。这些按钮导致从占位符添加/删除控件。一切正常。

现在我想将这个用户控件放在一个页面中,并将其包装在一个updatepanel中,如下所示:

            <asp:UpdatePanel ChildrenAsTriggers="true" ID="UpdatePanelFoo" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <grid:tablegrid ID="tablegrid_chapters" runat="server" SomeProperty="bar" />
                </ContentTemplate>
            </asp:UpdatePanel>

当我运行页面时,当我点击用户控件中的一个按钮时,它仍在进行完整的回发。我做错了什么,我该如何解决这个问题?

更新

protected void Page_Init()
{
    ScriptManager scr = ScriptManager.GetCurrent(this.Page);
    Response.Write("EnablePartialRendering: " + scr.EnablePartialRendering);
}

输出“EnablePartialRendering:true”

2 个答案:

答案 0 :(得分:4)

确保页面中的EnablePartialRendering=true上有ScriptManager

更新

看起来您的UserControl没有要查找的事件......您有2个选项。移动UserControl .ascx中的UpdatePanel,以便它可以看到按钮事件作为子项来装配或添加事件供它查看,为此尝试这样的事情:

    public event EventHandler Click;

    void btn_del_Click(object sender, EventArgs e)
    {
        if (NumberOfRowControls > 0)
        {
            var rowToWhack = panel_rows.Controls.Children().Single(x => x.ID == "myrow" + (NumberOfRowControls - 1));
            panel_rows.Controls.Remove(rowToWhack);
            NumberOfRowControls--;
        }
        if(Click != null) Click(this, e);
    }

    void btn_add_Click(object sender, EventArgs e)
    {
        var row = NewRow(NumberOfRowControls);
        panel_rows.Controls.Add(row);
        if(Click != null) Click(this, e);
    }

并更新UpdatePanel以寻找它:

<asp:UpdatePanel ID="UpdatePanelFoo" runat="server" UpdateMode="Conditional">
  <ContentTemplate>
     <grid:tablegrid ID="tablegrid_chapters" runat="server" SomeProperty="bar" />
  </ContentTemplate>
  <Triggers>
    <asp:AsyncPostBackTrigger ControlID="tablegrid_chapters" EventName="Click">
  </Triggers>
</asp:UpdatePanel>

答案 1 :(得分:-1)

确保将ScriptManager添加到页面中,否则没有UpdatePanel功能。