ASP.NET WebFormsでAJAX(エイジャックス)を体験!UpdatePanelで画面が白くならない快適サイト作成
生徒
「先生、ボタンを押したときに一瞬だけ画面が真っ白になって、また最初から読み込まれるのが気になります。これって普通なんですか?」
先生
「それは『ポストバック』という仕組みの影響ですね。でも、ASP.NET WebFormsには、画面全体を読み直さずに一部だけを更新する『AJAX(エイジャックス)』という便利な技術があるんですよ。」
生徒
「エイジャックス?なんだか強そうな名前ですね。画面が白くならないなら、使っている人も快適になりそうです!」
先生
「その通りです!代表的な機能である『UpdatePanel』を使えば、プログラミングが初めての方でも驚くほど簡単に実装できます。さっそく仕組みを見ていきましょう。」
1. AJAX(エイジャックス)とは?
ASP.NET WebForms(エーエスピー・ドットネット・ウェブフォーム)の世界で、より高品質なウェブサイトを目指すなら欠かせないのがAJAX(エイジャックス)です。これは、インターネットブラウザとサーバーの間で、こっそりとデータのやり取りを行う技術のことです。
プログラミング未経験でパソコンを触ったことがない方にもわかるように例えると、ウェブサイトの更新は「レストランの注文」に似ています。普通のサイト(ポストバック)は、一品注文するたびに、一度お店の外に出て、また扉を開けて入店し直すようなものです。これでは手間がかかりますよね。対してAJAXは、席に座ったまま店員さんを呼んで、その場でお皿だけを交換してもらうような仕組みです。
つまり、画面全体を読み込み直す(一瞬白くなる)ことなく、必要な部分だけを「サッ」と書き換えることができるのが、AJAX最大の魅力なのです。これにより、ユーザーはストレスなく操作を続けることができます。
2. ポストバックと非同期通信の違い
ここで少し用語の解説をします。従来の画面全体を送り出す仕組みを「同期通信(ポストバック)」と呼び、AJAXのように裏側でやり取りする仕組みを「非同期通信」と呼びます。
同期通信の場合、サーバーから「新しい画面のデータ」が届くまで、ブラウザは他の作業ができません。だから一瞬白くなったり、動きが止まったりします。しかし、非同期通信であれば、データの通信中もユーザーは他のボタンを触ったり、文字を読んだりすることができます。現代の地図アプリやSNSの「いいね」ボタンなどで、画面が切り替わらずに数字だけが増えるのは、すべてこの技術のおかげです。
3. 魔法の箱「UpdatePanel」の登場
本来、AJAXを実現するには「JavaScript(ジャバスクリプト)」という別の難しいプログラミング言語をたくさん書く必要があります。しかし、ASP.NET WebFormsには、その難しい部分を全部自動でやってくれるUpdatePanel(アップデートパネル)という魔法の箱が用意されています。
このUpdatePanelの中にボタンやラベルを入れるだけで、その中身だけがAJAXで動くようになります。難しい通信の理屈を知らなくても、この箱を置くだけでプロ級の滑らかな動きが実現できるのです。プログラミング初心者がまず最初に覚えるべき、非常に強力な味方といえるでしょう。
4. AJAXを使うための必須部品「ScriptManager」
UpdatePanelを使う前に、絶対に忘れてはいけない部品があります。それがScriptManager(スクリプトマネージャー)です。これは、ページ全体のAJAX機能を管理する「総監督」のような役割を果たします。
この総監督がページに一人いないと、UpdatePanelという箱を置いても「どうやって通信すればいいかわからない!」とエラーが出てしまいます。使い方は簡単で、ウェブ画面の設計図(HTML)の一番上に、ポンと置いておくだけで大丈夫です。まずはこの「総監督」を呼ぶところから、開発が始まります。
5. 実際にUpdatePanelを使ってみよう
それでは、具体的にどのように書くのかを見てみましょう。以下のコードは、ボタンを押すと現在の時刻が表示されるだけのシンプルなプログラムですが、画面全体は読み込まれず、時間だけがパッと変わります。
<asp:ScriptManager ID="smManager" runat="server" />
<asp:UpdatePanel ID="upnTimeArea" runat="server">
<ContentTemplate>
<p>現在の時刻:<asp:Label ID="lblTime" runat="server" Text="まだ取得していません"></asp:Label></p>
<asp:Button ID="btnGetTime" runat="server" Text="時刻を更新" OnClick="btnGetTime_Click" />
</ContentTemplate>
</asp:UpdatePanel>
次に、裏側のプログラム(C#)を記述します。こちらは、通常のWebFormsと同じ書き方でOKなのが嬉しいポイントです。
protected void btnGetTime_Click(object sender, EventArgs e)
{
// 現在の時間を「○時○分○秒」という形式でラベルに表示する
lblTime.Text = DateTime.Now.ToString("HH時mm分ss秒");
}
このボタンをクリックしても、ブラウザの「更新ボタン」は回転せず、一瞬で時間が書き換わります。これがAJAXの力です。
6. 待ち時間を知らせる「UpdateProgress」
AJAXは画面が切り替わらないため、複雑な処理をしているときに「今、サーバーが頑張って計算中なのか、それともフリーズしたのか」がユーザーに伝わりにくいという弱点があります。そこで便利なのがUpdateProgress(アップデートプログレス)という部品です。
これは、通信が行われている間だけ「通信中…」や「読み込み中…」といった文字や画像を表示してくれる機能です。パソコンの操作に慣れていない人にとって、何も反応がないのは不安なものです。この部品を使って「ちゃんと動いていますよ」と伝えることで、親切なウェブサイトになります。
<asp:UpdateProgress ID="upgLoading" runat="server">
<ProgressTemplate>
<div style="color:red; font-weight:bold;">データを読み込んでいます。少々お待ちください...</div>
</ProgressTemplate>
</asp:UpdateProgress>
7. AJAXを使う時の注意点:何でも囲めばいい?
「画面が白くならないなら、全部の部品をUpdatePanelに入れちゃえばいいのでは?」と思うかもしれません。しかし、これには注意が必要です。魔法の箱を使えば使うほど、実は裏側で動く「管理用のデータ」が少しずつ増えてしまい、逆に動作が重くなってしまうことがあるのです。
基本的には、掲示板の投稿リスト、検索結果の表示、リアルタイムの株価チェックなど、「その場所だけが頻繁に変わる」ところに絞って使うのがコツです。適切な場所で正しく使うことで、プロのエンジニアが作ったようなサクサク動くサイトに近づくことができます。
8. タイマー機能とAJAXの組み合わせ
最後に応用編として、Timer(タイマー)コントロールを紹介します。これを使えば、ユーザーがボタンを押さなくても、5秒おきや10秒おきに勝手に画面を更新することができます。
例えば、チャットアプリで新しいメッセージが届いていないか自動で見に行ったり、お天気の情報を最新に保ったりするのに使われます。このタイマーもUpdatePanelの中に入れることで、ユーザーの作業を邪魔することなく、ページを常に最新の状態に保つことができます。
<asp:UpdatePanel ID="upnAutoUpdate" runat="server">
<ContentTemplate>
<asp:Timer ID="tmrAuto" runat="server" Interval="5000" OnTick="tmrAuto_Tick"></asp:Timer>
<p>最終更新:<asp:Label ID="lblLastUpdate" runat="server" Text=""></asp:Label></p>
</ContentTemplate>
</asp:UpdatePanel>
protected void tmrAuto_Tick(object sender, EventArgs e)
{
// 5秒ごとに自動実行される処理
lblLastUpdate.Text = "自動更新されました:" + DateTime.Now.ToLongTimeString();
}
いかがでしたか?AJAXを使うと、ウェブサイトはもっと便利で、楽しいものに進化します。まずは簡単なUpdatePanelから始めて、ユーザーに優しい画面作りを楽しんでみてください!