UpdatePanel 包裹着用户控件

发布于 2024-08-19 16:21:45 字数 773 浏览 3 评论 0原文

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

现在我想将此用户控件放入页面中,并将其包装在更新面板中,如下所示:

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

I have a user control which contains some buttons and a placeholder. Those buttons cause controls to be added/removed from placeholder. Everything works fine.

Now I want to put this user control in a page, and wrap it in an updatepanel like so:

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

When I run the page, it's still doing a full postback when I hit one of the buttons inside the user control. What am I doing wrong, and how can I remedy this?

Update:

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

Outputs "EnablePartialRendering: true"

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

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

发布评论

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

评论(2

甜宝宝 2024-08-26 16:21:45

确保页面中的 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>

Make sure you have EnablePartialRendering=true on your ScriptManager in the page.

Update

It looks like your UserControl has no events to be looking for...you have 2 options here. Move the UpdatePanel inside the UserControl .ascx so it can see the button events as children to rig up or add an event for it to see, to do that try something like this:

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

And update the UpdatePanel to be looking for it:

<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>
我乃一代侩神 2024-08-26 16:21:45

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

Make sure you add a ScriptManager as well to the page, otherwise there's no UpdatePanel functionality.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文