チュートリアル : 複数の UpdatePanel コントロールとの ASP.NET Timer コントロールの使用
更新 : 2007 年 11 月
このチュートリアルでは、Timer コントロールを使用して、2 つの UpdatePanel コントロールの内容を更新します。Timer コントロールは 2 つの UpdatePanel コントロールの外側に配置され、両方のパネルのトリガとして構成されます。
前提条件
このチュートリアルの手順を実装するための要件は次のとおりです。
Microsoft Visual Studio 2005 または Microsoft Visual Web Developer Express Edition。
AJAX 対応の ASP.NET Web サイト。
指定された間隔で UpdatePanel コントロールを更新するには
新しいページを作成し、デザイン ビューに切り替えます。
ページに ScriptManager コントロールが含まれていない場合は、ツールボックスの [AJAX Extensions] タブで、ScriptManager コントロールをダブルクリックしてページに追加します。
ツールボックスで、Timer コントロールをダブルクリックして Web ページに追加します。
メモ : Timer コントロールは、UpdatePanel コントロールの中または外のどちらでもトリガとして機能します。この例では、UpdatePanel コントロールの外側で Timer コントロールを使用する方法を示します。UpdatePanel コントロールの内側で Timer コントロールを使用する例については、「チュートリアル : Timer コントロールの概要」を参照してください。
ツールボックスで、UpdatePanel コントロールをダブルクリックしてページにパネルを追加し、UpdateMode プロパティを Conditional に設定します。
UpdatePanel コントロールをもう一度ダブルクリックしてページに 2 番目のパネルを追加し、UpdateMode プロパティを Conditional に設定します。
UpdatePanel1 という名前の UpdatePanel コントロールの中をクリックし、ツールボックスの [標準] タブで、Label コントロールをダブルクリックして UpdatePanel1 に追加します。
ラベルの Text プロパティを "UpdatePanel1 not refreshed yet" に設定します。
Label コントロールを UpdatePanel2 に追加します。
ラベルの Text プロパティを "UpdatePanel2 not refreshed yet" に設定します。
Timer の Interval プロパティを 10000 に設定します。
Interval プロパティはミリ秒単位で定義されるため、Interval プロパティを 10,000 ミリ秒に設定すると、UpdatePanel コントロールが 10 秒ごとに更新されます。
メモ : この例では、タイマ間隔は 10 秒に設定されます。これにより、例を実行するときに、結果を確認するために長い時間待機する必要がありません。ただし、各タイマ間隔により、サーバーへのポストバックとネットワーク トラフィックが発生します。したがって、実際のアプリケーションでは、そのアプリケーションにおいて実用的な最長時間を設定する必要があります。
Label1 コントロールと Label2 コントロールの Text プロパティを現在の時刻に設定するハンドラにコードを追加します。
Partial Class _Default Inherits System.Web.UI.Page Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick Label1.Text = "UpdatePanel1 refreshed at: " & _ DateTime.Now.ToLongTimeString() Label2.Text = "UpdatePanel2 refreshed at: " & _ DateTime.Now.ToLongTimeString() End Sub End Class
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Timer1_Tick(object sender, EventArgs e) { Label1.Text = "UpdatePanel1 refreshed at: " + DateTime.Now.ToLongTimeString(); Label2.Text = "UpdatePanel2 refreshed at: " + DateTime.Now.ToLongTimeString(); } }
両方の UpdatePanel コントロールに AsyncPostBackTrigger コントロールを追加することで、UpdatePanel1 と UpdatePanel2 のトリガとして Timer1 を指定します。次のコードに示すように、これは宣言によって実行できます。
<Triggers> <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /> </Triggers>
完全なページのマークアップを次の例に示します。
<%@ Page Language="VB" AutoEventWireup="true" CodeFile="Default.aspx.vb" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" /> <div> <asp:Timer ID="Timer1" OnTick="Timer1_Tick" runat="server" Interval="10000"> </asp:Timer> </div> <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server"> <Triggers> <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /> </Triggers> <ContentTemplate> <asp:Label ID="Label1" runat="server" Text="UpdatePanel1 not refreshed yet."></asp:Label> </ContentTemplate> </asp:UpdatePanel> <asp:UpdatePanel ID="UpdatePanel2" UpdateMode="Conditional" runat="server"> <Triggers> <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /> </Triggers> <ContentTemplate> <asp:Label ID="Label2" runat="server" Text="UpdatePanel2 not refreshed yet."></asp:Label> </ContentTemplate> </asp:UpdatePanel> </form> </body> </html>
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" /> <div> <asp:Timer ID="Timer1" OnTick="Timer1_Tick" runat="server" Interval="10000"> </asp:Timer> </div> <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server"> <Triggers> <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /> </Triggers> <ContentTemplate> <asp:Label ID="Label1" runat="server" Text="UpdatePanel1 not refreshed yet."></asp:Label> </ContentTemplate> </asp:UpdatePanel> <asp:UpdatePanel ID="UpdatePanel2" UpdateMode="Conditional" runat="server"> <Triggers> <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /> </Triggers> <ContentTemplate> <asp:Label ID="Label2" runat="server" Text="UpdatePanel2 not refreshed yet."></asp:Label> </ContentTemplate> </asp:UpdatePanel> </form> </body> </html>
変更内容を保存し、Ctrl キーを押しながら F5 キーを押して、ブラウザでページを表示します。
UpdatePanel コントロールが更新されるまで、10 秒以上待機します。
両方のパネルに更新された時刻が表示されます。
レビュー
このチュートリアルでは、Timer コントロールを複数の UpdatePanel コントロールと一緒に使用して、ページを部分的に更新する方法について説明しました。ScriptManager コントロールを追加した後、UpdatePanel コントロールを追加する必要があります。Timer コントロールは、ユーザーがパネルのトリガとして構成した場合、パネルの内容を更新します。
UpdatePanel コントロールの内側で Timer コントロールを使用する方法の詳細については、「チュートリアル : Timer コントロールの概要」を参照してください。