自定义服务器控件导致UpdatePanel内部完全回发

时间:2009-06-02 20:04:35

标签: .net asynchronous updatepanel postback custom-server-controls

我有一个自定义服务器控件似乎工作正常,直到我把它放在UpdatePanel中。一旦进入UpdatePanel,它继续正常工作,但当我的自定义服务器控件执行回发时,UpdatePanel现在会执行完全回发。

我是否需要做任何事情让我的自定义服务器控件在UpdatePanel内部执行异步回发?

以下是导致完整回发的相关代码。 ecs:Pager控件是我的自定义控件,它会导致OnCommand事件的完全回发,即使它在UpdatePanel中。

<asp:UpdatePanel ID="ClosedIssuesUpdatePanel" runat="server">
    <ContentTemplate>
        <ecs:Pager ID="ClosedIssuesPager" OnCommand="ClosedIssuesPager_Command" runat="server" />
        <asp:Repeater ID="ClosedIssuesRepeater" runat="server">
        ....
        </asp:Repeater>
    </ContentTemplate>
</asp:UpdatePanel>

6 个答案:

答案 0 :(得分:1)

将更新面板的更新模式设置为条件。

<asp:UpdatePanel ID="ClosedIssuesUpdatePanel" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <ecs:Pager ID="ClosedIssuesPager" OnCommand="ClosedIssuesPager_Command" runat="server" />
        <asp:Repeater ID="ClosedIssuesRepeater" runat="server">
        ....
        </asp:Repeater>
    </ContentTemplate>
</asp:UpdatePanel>

答案 1 :(得分:1)

您没有指定自定义控件中使用的控件类型。它们是按钮还是下降或其他什么?如果它们是按钮,则需要确保其UseSubmitBehavior属性设置为False。

此外,您将要通过ScriptManager.RegisterAsyncPostBackControl

在页面的ScriptManager中注册您的控件

答案 2 :(得分:1)

我遇到了类似的问题,发现将ClientIDMode =“AutoID”属性添加到我的用户控件标记中解决了这个问题。

答案 3 :(得分:0)

抱歉......无法看到页面的其余部分。

您的页面上是否还有ScriptManager?

答案 4 :(得分:0)

自定义控件是否实现INamingContainer,并且是来自该命名容器内另一个控件的回发?

我发现UpdatePanel和源代码控制之间的命名容器边界可能会导致此行为。

答案 5 :(得分:0)

一个选项可能是AndreasKnudsen建议在面板中添加AsyncPostBackTrigger

<asp:UpdatePanel ID="ClosedIssuesUpdatePanel" runat="server">
  <ContentTemplate>
    <ecs:Pager ID="ClosedIssuesPager" OnCommand="ClosedIssuesPager_Command" runat="server" />
    <asp:Repeater ID="ClosedIssuesRepeater" runat="server">
      ....
    </asp:Repeater>
  </ContentTemplate>
  <Triggers>
    <AsyncPostBackTrigger ControlID="ClosedIssuesPager" EventName="Command" />
  </Triggers>
</asp:UpdatePanel>

另一个选择是尝试将ChildrenAsTriggers添加到UpdatePanel标记

<asp:UpdatePanel ID="ClosedIssuesUpdatePanel" runat="server" ChildrenAsTriggers="true">