所有UpdatePanels同时发回

时间:2013-02-27 13:58:57

标签: asp.net updatepanel

我有一个C#.net 4.0网站项目,上面有一个相当复杂的过滤搜索页面。在Repeater中添加了多个UpdatePanel。当一个UpdatePanel执行回发时 - 所有其他UpdatePanel也同时回发。

这成为一个问题,因为可能有很多UpdatePanel依赖于用户选择查看的项目数。我知道UpdatePanels并不理想 - 我没有写这个,但必须尽快修复它!

LandingPage包含一个带有Repeater控件的UpdatePanel。在转发器内是一个名为Article的用户控件。 Article控件包含一些HTML和第二个名为Save的用户控件。 Save控件也有一个UpdatePanel。

我遇到的问题是只引发了第一个btnSave事件。因此,如果我单击“btnSave”它可以工作,但所有后续按钮点击事件都不会触发。

我还注意到Save控件中的UpdatePanel的所有实例同时回发 - 这是正常的吗?

因此页面的简化视图如下:

LandingPage.aspx

<asp:UpdatePanel ID="pnl" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
  <ContentTemplate>
    <asp:Repeater ID="resultsRep" runat="server">
      <ItemTemplate>
        <uc:Article id="Article1" runat="server" />
      </ItemTemplate>
    </asp:Repeater>
    <asp:Button id="btnLoadMore" runat="server" Text="Load More" />
  </ContentTemplate>
  <Triggers>
    <asp:AsyncPostBackTrigger ControlID="btnLoadMore" EventName="Click" />
  </Triggers>
<asp:UpdatePanel>

自定义用户控制“文章”

<asp:PlaceHolder ID="ArticlePanel" runat="server">
  <!-- Assorted HTML stuff here -->
  <uc:Save id="Save1" runat="server" />
</asp:PlaceHolder>

自定义用户控制“保存”

<asp:UpdatePanel ID="ctl" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="True">
  <ContentTemplate>
    <asp:LinkButton ID="btnSave" runat="server" OnClick="btnSave_Click" CausesValidation="False" Text="Save" />
  </ContentTemplate>
</asp:UpdatePanel>

一如既往地感谢您。

修改

经过进一步调查后,使用Firebug控制台我发现后续回发不会发生,因为引发了以下错误:

505|error|500|Invalid postback or callback argument.  
Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  
For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  
If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.|

所以我似乎不知何故发布了一些狡猾的东西?

1 个答案:

答案 0 :(得分:0)

问题在于使用嵌套的UpdatePanels。我不知道错误本身实际来自哪里,但经过反复试验后,我发现父UpdatePanel配置不正确。

父UpdatePanel应该是这样的:

<asp:UpdatePanel ID="pnl" runat="server" UpdateMode="Always" ChildrenAsTriggers="true">

区别在于UpdateMode =“Always”和ChildrenAsTriggers =“true”。 UpdateMode告诉父UpdatePanel在任何子项重新加载时刷新。 ChildrenAsTriggers属性允许子UpdatePanels刷新父级。

所以现在它起作用 - 主要是。我仍然有每次发布的每个UpdatePanels的问题。它效率很低但我似乎无法阻止它。