更新面板内的用户控件导致整个页面回发

11

我有一个包含LinkButton(用于分页)和Repeater的用户控件,它们都在UpdatePanel内部。分页工作正常,但每次点击到下一页时都会导致完整的页面回发。

UpdatePanel看起来像这样:

<asp:UpdatePanel ID="up1" runat="server" UpdateMode="Always">
        <ContentTemplate>
            <asp:Repeater ID="rptOrganizations" runat="server">
                <HeaderTemplate>
                    <table>
                        <thead>
                            <tr>
                                <th>Organization</th>
                                <th>State</th>
                                <th>Accredited Since</th>
                            </tr>
                        </thead>
                    </table>
                </HeaderTemplate>
                <ItemTemplate>
                    <tr>
                        <td>
                            <asp:Literal ID="ltlInstitution" runat="server" />
                        </td>
                        <td>
                            <asp:Literal ID="ltlState" runat="server" />
                        </td>
                        <td>
                            <asp:Literal ID="ltlAccreditedDate" runat="server" />
                        </td>
                    </tr>
                </ItemTemplate>
                <FooterTemplate>
                    </table>
                </FooterTemplate>
            </asp:Repeater>

            <uc2:RepeaterPaging ID="rpPager" runat="server" PageSize="10" OnNextButtonClickEvent="btnNext_Click" OnPreviousButtonClickEvent="btnPrev_Click" />
        </ContentTemplate>  
    </asp:UpdatePanel>

而用户控件的内容如下:

<asp:LinkButton ID="btnPrev" runat="server" OnClick="btnPrev_Click">Previous</asp:LinkButton> | 
<asp:LinkButton ID="btnNext" runat="server" OnClick="btnNext_Click">Next</asp:LinkButton> 

&nbsp;&nbsp;
<asp:Literal ID="ltlNumResults" runat="server" /> results returned.

到目前为止,我尝试为用户控件添加异步回发触发器,这确实会导致异步回发,但不会更新更新面板中其余的文本。换句话说,异步回发发生,并且下一页显示出来,但原先重复器中的原始文本也在下方。

我还确认了我的链接按钮上设置了IDS,因为这可以在更新面板内触发完整的回发。

我尝试更改更新面板模式(始终、条件、ChildrenAsTriggers等等)。

这些尝试都没有任何作用——唯一真正导致异步回发的是使用触发器,但是更新面板中的其他内容没有被更新,所以我得到了重复的内容。有什么想法吗?


那个关于LinkButton缺少ID导致完整的PostBack的信息对我很有用,谢谢! - paulH
2个回答

15

如果你的UpdatePanel无法将其内容呈现到<div>中(例如,当它位于<tr>内时),则会发生完整的postback。因此,请检查UpdatePanel内的HTML代码,您可能会在那里找到答案(同时,寻找一些不正确的XHTML,例如错误关闭的元素)。


这就是问题所在!如果你注意到头部模板里,我不小心关闭了</table>标签,而没有在页脚处关闭它。当我移除了错误的标签后,它就开始工作了。我从来没有想到更新面板会如此敏感... - Neil
+1:我的UpdatePanel直接放在表格标签里,当我把它移到外面时,一切都开始正常工作了。谢谢! - Dev F

0

移除 update mode="Always",不要在上面添加任何内容,这样应该就可以工作了。

还有一件事,您是否将脚本管理器添加到您的页面或控件中?

没有脚本管理器它将无法工作。


我认为默认的更新模式总是存在的 - 我已经将其删除,但没有任何影响。脚本管理器当前添加到页面上,而不是用户控件中。 - Neil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接