2011-02-10 31 views
1

私は2つのUpdatePanelsとページを持っている:ポストバックコントロールが最初のパネル内のListViewであり別のUpdatePanelからのポストバック後にUpdatePanelを表示して更新しますか?

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

<asp:UpdatePanel id="DetailUpdatePanel" runat="server" UpdateMode="conditional"> 
.. 
</asp:UpdatePanel> 

。何が起こる必要があるのは、ページがListViewからイベントを取得し、ページがモードを切り替える必要があるときです。コードは、その時点で2番目のパネルを表示して更新する必要があります。コマンドイベントが、その後、編集を設定するプロパティPageModeが発生します。

protected override void OnPreRender(EventArgs e) 
{ 
    ListPanel.Visible = PageMode == PageModes.List; 
    EditPanel.Visible = PageMode == PageModes.Edit; 
    if (PageMode == PageModes.Edit) 
    { 
     EditUpdatePanel.Update(); 
    } 
    else 
    { 
     ListUpdatePanel.Update(); 
    } 
    base.OnPreRender(e); 
} 

しかし、それは働いていないが、私はこのエラーを取得する: ScriptResource.axd:868Uncaught Sys.InvalidOperationException:IDとのUpdatePanelを見つけることができませんでした ' ctl00_ctl11_DetailUpdatePanel '。動的に更新されている場合は、別のUpdatePanel内にある必要があります。

私のパネルが自動に設定されている場合、これが期待されます。私はここにはあまり入らない何かがあるように感じます。ポストバックがUpdatePanelの内部から発生した場合、それがConditionalに設定されていても、そのコントロールは何とかそのUpdatePanelに結びついていますか? asp.netに特定のUpdatePanelを「中断」させる方法はありますか?完全なポストバックは実行しないでください。

これは両方とも同じUpdatePanelにあったものですが、詳細パネルから特定の状況でサブミットをブロックするロジックを実装しなければならないため、これらを分離する必要があります。それらは同じUpdatePanelにあります。私はいつも両方をレンダリングすればうまくいくと思っていますし、CSSを使ってユーザーが特定のモードで操作したくないものを隠すことができます。あるいは、両方を外側のUpdatePanelに配置します。しかし、それは無駄な帯域幅のように思えますが、これを私が望むように動作させる方法があることを願っています。

答えて

0

は、ASP.NETは、更新パネルからの要求を受信すると、その応答にのみ、そのパネルの内容(プラスビュー状態を含む

+0

マニュアルコントロールはまったく同じではありませんか?私は同じエラーが出る気がします。 –

+0

私は、updatepanleは部分的なレンダリングしかしないので、リクエストとともに他のpanleを送信することさえできないと思います。 – XtremeBytes

0

他のパネルにAsynctriggerとしてポストバックを引き起こす第一のパネル上のボタンを関連付けとイベント検証データ)。 MSDNのPartial-Page Rendering Overviewから:

An asynchronous postback behaves much like a synchronous postback. All the server page life-cycle events occur, and view state and form data are preserved. However, in the rendering phase, only the contents of the UpdatePanel control are sent to the browser. The rest of the page remains unchanged.

(私はまた、Firebugの、バイオリン弾き、または他の同様のツールでリクエストとレスポンスを自分で見てみることをお勧めします。)

を使用すると、更新パネルを使用することにコミットしている場合は( jQueryや他のクライアント側のライブラリではなく)、リストと詳細を1つのパネルに入れなければなりません。

+0

どうやら私はエラーメッセージを読むのに問題があります...答えは常にありました: ...それは別のUpdatePanelの中​​になければなりません。。私はUpdatePanelsを使うことに全力を尽くしているとは言いませんが、可能な限りいつでも避けていますが、適切な状況に適したツールです。私はすでにjQueryをいくつかの検証とビジュアル要素に使用していますが、フォームをレンダリングするロジックは非常に複雑で、UpdatePanelを避けるためにオブジェクトモデルをクライアントに複製することには興味がありません! –

関連する問題