.NET 3.5を使用しており、Community Server2008フレームワーク内でページを構築しています。
あるページで、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>
ボタンをクリックするたびに、パネルが更新されることを確認してください。ただし、ページ全体が投稿されます。ページ全体が点滅しているのがわかります。私は一体何を間違っているのですか?
ネストされたマスターページ内にいますが、これが問題かどうかはわかりません。私が使用しているこのコミュニティサーバーフレームワークに、すべてのイベントをポストバックさせる何かがあるでしょうか?
[トリガー]セクションでButton1
をAsyncPostBackTrigger
として設定してみましたか? 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>
上記のコードサンプルにLabel2が表示されていません。 Label2がUpdatePanelの外部にある場合、ページがLabel2を適切に更新するために必要なため、ページ全体が更新されます。
デフォルトでは、UpdatePanelsは、内部のコントロールによってトリガーされた場合にのみ、内部のコンテンツを動的に更新します。パネルの外側にあるボタンを使用して更新を行ったり、別のパネルのラベルを更新したりするなど、より高度な更新を行う必要がある場合は、UpdatePanelでConditional属性を設定し、手動で更新を呼び出す必要があります。あなたのコードで。
もう1つの考えられる理由は、ページにClientIDMode="static"
がある場合、UpdatePanelだけを更新する予定のコントロールがページ全体を更新することです。
この問題を修正するには、UpdatePanelのポストバックをトリガーするコントロールにClientIDMode="AutoID"
を設定する必要があります。
「デフォルトでは、UpdatePanelsは、内部のコントロールによってトリガーされた場合にのみ、内部のコンテンツを動的に更新します。」
そうしないと、ページ全体が更新されます。それがポイントです!
セットする ChildrenAsTriggers="true"
UpdatePanelコントロール上。
.net Framework v1.1からアップグレードされた古いプロジェクトがある場合は、Web構成から次の行を削除して機能させます。
<xhtmlConformance mode="Legacy"/>