0

私は C# .net 4.0 Web サイト プロジェクトを持っており、その上にかなり複雑なフィルター処理された検索ページがあります。Repeater 内に追加される複数の UpdatePanels があります。1 つの UpdatePanel がポストバックを行うと、他のすべての UpdatePanel も同時にポストバックします。

ユーザーが表示することを選択したアイテムの数に応じて、非常に多くの UpdatePanels が存在する可能性があるため、これは問題になります。UpdatePanels が理想的でないことはわかっています。これは私が書いたものではありませんが、すぐに修正する必要があります。

Repeater コントロールを内部に持つ UpdatePanel を保持する LandingPage があります。リピーター内には、Article というユーザー コントロールがあります。Article コントロールには、いくつかの HTML と、Save という 2 番目のユーザー コントロールが含まれています。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.|

それで、どういうわけか私は危険なものを投稿しているように見えますか?

4

1 に答える 1

0

問題は、ネストされた UpdatePanels の使用にありました。エラー自体が実際にどこから来たのかはわかりませんが、試行錯誤の結果、親の UpdatePanel が正しく構成されていないことがわかりました。

親の UpdatePanel は次のようになっているはずです。

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

違いは、UpdateMode="Always" と ChildrenAsTriggers="true" です。UpdateMode は、子のいずれかがリロードされたときに更新するよう親 UpdatePanel に指示します。ChildrenAsTriggers 属性により、子の UpdatePanels が親の更新を引き起こすことができます。

だから今それは動作します - ほとんど。私はまだすべての UpdatePanels が毎回ポストバックするという問題を抱えています。それは本当に非効率的ですが、私はそれを止めることができないようです.

于 2013-02-27T16:31:23.777 に答える