我有一个自定义服务器控件似乎工作正常,直到我把它放在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>
答案 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中注册您的控件答案 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">