1

この形式のマークアップがあります:-

 <asp:UpdatePanel runat="server" id="UpdatePanelList" UpdateMode="conditional">
     <ContentTemplate>   
         <asp:ListView></asp:ListView> 
     </ContentTemplate> 
 </asp:UpdatePanel>

 <asp:UpdatePanel runat="server" ID="UpdatePanelMain" UpdateMode="Conditional">
    <ContentTemplate />
 </asp:UpdatePanel> 

この更新パネルでは、データベースのレコードが見つかった場合、DataGrid コントロール (ラベルとドロップダウン コントロールを含む) が表示されます。そうでない場合は、HtmlGenericControl DIV コントロールが表示され、ユーザーにレコードの作成を求める関連メッセージが表示されます。これらのコントロールはどちらも動的に作成され、"ToString" などの "出力" 関数を使用してカスタム構築されたクラスが取り込まれます。

UpdatePanel にデータを入力するいくつかの連続する DataGrid コントロールで操作をテストすると、これは正常に機能します。同様に、HtmlGenericControl DIV も期待どおりに複数回連続して入力されます。

ただし、UpdatePanel を設定するために他のコントロール タイプをテストすると、これは最初のインスタンスで機能しますが、UpdatePanel を設定するための追加のポストバックは失敗し、ダイアログ ボックスが表示されます。

Failed to load viewstate.  The control tree into which viewstate is being 
loaded must match the control tree that was used to save viewstate during
the previous request.  For example, when adding controls dynamically, the 
controls added during a post-back must match the type and position of the 
controls added during the initial request.

UpdatePanel コントロールが動的コントロールの場合、このインスタンスでビューステートを制御すると信じるようになりました。

ビューステートを復元して、複数のタイプのコントロールを同じ UpdatePanel に表示できるようにするにはどうすればよいですか?

ありがとう。

4

1 に答える 1

0

「Init」または「Load」ライフサイクル イベントで最後のページが生成されたときと同じ階層順序で、すべての動的コントロールを復元します (そのための情報を ViewState に保存するか、適切と判断されたものに保存します) 。これは、ASP.NET WebForms での通常のポストバックと非同期ポストバックの要件と同じです。

コントロールは、コントロール階層に合わせて追加し、「読み込み」イベントの後に削除する必要があります。

参照する:

  1. これは、これを支援するための事前に作成されたコントロールです。また、それがどのように機能するかについても説明します。
  2. ASP NET ユーザー コントロールの動的読み込み
于 2012-04-02T00:54:44.097 に答える