【问题标题】:All UpdatePanels posting back at the same time所有更新面板同时回发
【发布时间】:2013-02-27 13:58:56
【问题描述】:

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

这会成为一个问题,因为根据用户选择查看的项目数量可能会有很多很多更新面板。我知道 UpdatePanel 并不理想 - 我没有写这个,但必须尝试快速修复它!

LandingPage 包含一个 UpdatePanel,里面有一个 Repeater 控件。在转发器中有一个名为 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.|

所以我似乎以某种方式发回了一些狡猾的东西?

【问题讨论】:

    标签: asp.net updatepanel


    【解决方案1】:

    问题归结为嵌套更新面板的使用。我不知道错误本身实际上来自哪里,但经过反复试验,我发现父 UpdatePanel 配置不正确。

    父 UpdatePanel 应该是这样的:

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

    区别在于 UpdateMode="Always" 和 ChildrenAsTriggers="true"。 UpdateMode 告诉父 UpdatePanel 在任何子重新加载时刷新。 ChildrenAsTriggers 属性允许子 UpdatePanel 引起父刷新。

    所以现在它可以工作了 - 主要是。我仍然有每一个 UpdatePanel 每次都发回的问题。它确实效率低下,但我似乎无法阻止它。

    【讨论】:

    • 我只想补充一点,UpdatePanel 是邪恶的。我更喜欢使用 jQuery AJAX 和 ASHX 处理程序——简单而灵活。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 2011-07-04
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    相关资源
    最近更新 更多