【问题标题】:UpdatePanel wrapped around a user control环绕用户控件的 UpdatePanel
【发布时间】:2011-01-10 13:41:28
【问题描述】:

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

现在我想把这个用户控件放在一个页面中,并将它包装在一个更新面板中,如下所示:

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

【问题讨论】:

  • 您能否发布将控件添加到占位符的代码,并说明您单击的哪个会导致完整的回发?
  • 有点长,所以这里是:pastebin.com/m27ee8069 - 有一个占位符和两个按钮,按下任一按钮都会导致完整的回发
  • 顺便说一句,我上面示例中的“SomeProperty”是 pastebin 代码中的“UserControlPath”
  • @mgroves: 你能把 aspx 标记加进去吗?另外,您单击什么会提供完整的回发,btn_add
  • 我已经更新了下面的答案,希望这对你有用...如果没有,请在@reply 中告诉我或回复评论

标签: asp.net ajax updatepanel user-controls


【解决方案1】:

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

更新

看起来您的 UserControl 没有要查找的事件...您在这里有 2 个选项。将 UpdatePanel 移动到 UserControl .ascx 中,这样它就可以将按钮事件作为子项进行装配或添加一个事件供其查看,尝试如下操作:

    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>

【讨论】:

  • 哇,进步了。现在它起作用了,一次。我再次单击,我得到一个 javascript 错误。
  • @mgroves:太好了...如果您遇到其他问题,请跟进评论
  • 我会的——你已经非常有帮助了,我希望我能给你更多的积分。
【解决方案2】:

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

【讨论】:

  • 没有 ScriptManager 会导致未描述的错误。
猜你喜欢
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多