2011-01-31 6 views
1

私は複雑なケースがあるので、投稿できません。私は2つのそれらの内部UserControlsを持つ2つのUpdatePanelsを持ってUpdatePanelが別のものにポストバックするとき

は、次のように:

このサンプルで
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <A:u1 ID="u1" runat="server" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <A:u2 ID="u2" runat="server" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

u1PostBacku2には影響しません。私のコードではUserControlPostBackは2番目にPostBackとなりました。

予想される理由は何ですか?

ありがとうございました。

答えて

1

これは仕様によるものです。部分的なポストバックが発生した場合、結果のマークアップの一部のみがクライアントに送信されたとしても、ページ全体が再度レンダリングされます。したがって、u1のみが更新されていても、両方のユーザーコントロールが再びライフサイクルを通過します。

あなたがそのような場合を検出したい場合は、IsInAsyncPostBackプロパティを使用することができます。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (ScriptManager.GetCurrent(Page).IsInAsyncPostBack) { 
     // This is a partial postback. 
    } 
} 
+0

申し訳ありませんが、私が書いたサンプルでは、​​私は 'UserControls'の' Page_Load'にブレークポイントを追加しました他の人が 'PostBack'を作ったときに呼び出されるのではありません。 – Homam

+0

@John、興味深いことに、[間違いなく]呼び出されるべきです(http://forums.asp.net/p/1023109/1389657.aspx)。あなたのブレークポイントはハンドラの始めに正しく設定されていますか? –

+0

ありがとうございます。 2つの 'UserControls'では、ifステッテインメントに入ります。申し訳ありませんが、なぜですか? – Homam

関連する問題