2009-04-07 10 views
12

私は.NET 3.5を使用しており、Community Server 2008フレームワークの内部にページを構築しています。UpdatePanelがページポストバック全体を引き起こさないようにするには?

ページの1つでは、私はUpdatePanelを動作させようとしています。

私がしようとする機能にページ全体の更新を実行するとき、私は、ボタンをクリックすることで現在の時刻にまっすぐASP.NETのWebサイト、更新のUpdatePanelの時間からサンプルを取ったが、いくつかの理由があります。ここで

は私が持っているものです。

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Label1.Text = "Panel refreshed at " + DateTime.Now.ToString(); 
    Label2.Text = "Panel refreshed at " + DateTime.Now.ToString(); 
} 
<asp:ScriptManager ID="ScriptManager1" runat="server"/> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <fieldset> 
      <legend>UpdatePanel</legend> 
      <asp:Label ID="Label1" runat="server" Text="Panel created."></asp:Label><br /> 
      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> 
     </fieldset> 
    </ContentTemplate> 
</asp:UpdatePanel> 

私はボタン、必ずパネルのアップデート]をクリックするたびに - バックが、ページ全体の投稿を!私はページ全体が点滅しているのを見ることができます。私は間違って何をしていますか?

私は入れ子のMasterpageの中ですが、これが問題であるかどうかはわかりません。このコミュニティサーバーフレームワークに、私がすべてのイベントをポストバックさせる何かがありますか?

答えて

16

Button1AsyncPostBackTriggerとして[トリガー]セクションに設定してみましたか? ChildrenAsTriggersプロパティをtrueに、UpdateModeプロパティをConditionalに設定します。

protected void Button1_Click(object sender, EventArgs e) 
{  
    Label1.Text = "Panel refreshed at " + DateTime.Now.ToString();  
    UpdatePanel1.Update(); 
}  
<asp:ScriptManager ID="ScriptManager1" runat="server"/> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional"> 
    <Triggers>   
     <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />  
    </Triggers>  
    <ContentTemplate>   
     <fieldset>    
      <legend>UpdatePanel</legend>    
      <asp:Label ID="Label1" runat="server" Text="Panel created."></asp:Label><br />    
      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />   
     </fieldset>  
    </ContentTemplate> 
</asp:UpdatePanel> 
+0

ありがとうございます! – user53885

+0

asyncpostbacktriggerが付いたトリガーセクションが私の一日を作りました、ありがとう! – BitQuestions

+0

この明示的な非同期トリガーが必要な理由を説明できる人はいますか? UpdatePanel内のコントロールは、デフォルトで部分的なページの更新を引き起こすはずですか? – drizin

6

上記のコードサンプルでLabel2が表示されません。 Label2がUpdatePanelの外側にある場合、ページがLabel2を適切に更新するために必要なものであるため、ページ全体がリフレッシュされます。

デフォルトでは、UpdatePanelsは、その中のコントロールによってトリガされたときに、その中のコンテンツを動的にリフレッシュします。リフレッシュを引き起こすパネル外のボタンや別のパネルのラベルを更新する必要がある場合は、UpdatePanelにConditional属性を設定して、いくつかの手動Update呼び出しを行う必要がありますあなたのコードで。

+0

ありがとうございます! – user53885

2

UpdatePanelコントロールにChildrenAsTriggers="true"を設定します。

2

「デフォルトでは、その中のコントロールによってトリガーされたとき、UpdatePanelsは動的にのみ、その内のコンテンツが更新されます。」

これ以外の場合、ページ全体がリフレッシュされます。それはポイントです!

2

ページがClientIDMode="static"の場合、UpdatePanelだけをリフレッシュすると予想されるコントロールはページ全体を更新します。

問題を解決するには、UpdatePanelポストをトリガーするコントロールにClientIDMode="AutoID"を設定するだけです。

関連する問題