ASP .NET Web Formの魅力

2011年3月9日(水)
ナオキ(監修:山田祥寛)

はじめに

MicrosoftのWebプラットフォームにおいて、中核とも言える役割を任されているのはWebフレームワークASP.NETです。現在、ASP.NETは大別するとASP.NET Web Form(以下、Web Form)とASP.NET MVCに分類できます。本稿では、ASP.NET登場から現在まで利用され続けているWeb Formにフォーカスを充てて、開発のポイントやWeb Formの集大成とも言える、ASP.NET 動的データ(以下、動的データ)について解説します。

ASP.NET Web Formの特徴

前回、ASP.NET Web Formは「HTMLなどの各種要素を可能な限り隠ぺいしたサーバーコントロールの利用」と、「デスクトップアプリケーションのようなイベント駆動のアプリケーション開発」と紹介しました。ここでいま一度、ASP.NET Web Formの全体像を見てみましょう。

図1:ASP.NET Web Form概要(クリックで拡大)

クライアントサイドから各ブラウザでアクセスがあると、サーバーサイドではASPXファイル(Webページ)のインスタンスを生成します。ASPXファイルにはサーバーコントロールでページのレイアウトが定義されており、これをもとにHTMLによる応答を生成します。

続いてクライアントサイドで、何らかのイベントを発生させると、同じページに対してリクエストが送られます。イベント発生時などにASPXファイルのバックエンドなどではCookieの操作やファイル転送、出力キャッシュの制御などを行うビジネスロジックなどが記載されているかも知れません。ASP.NETでは、大抵のWebアプリケーション開発に必要なクラスライブラリが用意されているので、これらを利用してビジネスロジックを組む事ができます。ASP.NET Web Formは大体このようにしてアプリケーションが作られます。

さて、さらっと記載しましたが、今の説明の中でASP.NET Web Formの重要な機能が幾つかちりばめられていますので、それらを紐解きたいと思います。

ポストバックとViewState

イベント処理を記載すると書きましたが、ASP.NETはデスクトップアプリケーションしか開発した経験がない開発者に、HTML/CSS/JavaScriptなどの言語の記載方法やHTTPプロトコルなどの特徴を知らなくても、デスクトップアプリケーションのようにイベント駆動プログラミングができるという点を当初売りにしていました。そのため、ASP.NETフレームワーク内では他のWebフレームワークでは想像できないほどの特異な処理を多く記載しています。代表的な機能として挙げられるのは、ポストバックとViewStateです。

通常のWebアプリケーションは、クライアントサイドでイベント発生後、クライアントサイドスクリプトなどで処理を実施し、別ページに対してリクエストを送信します。

しかし、ASP.NETのポストバックは、ユーザーが入力した(もしくは選択した)データを、次のページではなく同じページに対して送信する機能です。

図2:ポストバックとは?(クリックで拡大)

ViewStateはステートレスなWebアプリケーションに対して状態を保持させる仕組みです。

Webアプリケーションは多くのリクエストに対応するためにリクエスト対応後には生成されたページを破棄します。ポストバックで戻ったページは見かけは同じでも元のページとは異なるインスタンスのページです。つまり、破棄されたページの状態を保持していません。例えば、ボタンを押すたびに数字をカウントしてラベルに表示するページを作成するとします。ここでは内部変数に数字を持たせて、ボタンを押される度にポスト前のページの内部変数に1を追加する処理を記載したとしましょう。

図3:ViewStateとは?~クリック数をラベルに表示するサンプル例~(クリックで拡大)

デスクトップアプリケーションならばこの処理で問題無く実装できますが、Webアプリケーションの場合は前述の通り、リクエストで送信されたページは同一であってもインスタンスが異なるため、内部変数はリクエストの度リセットされてしまいます。ASP.NETではこの様な内部変数などの状態を保存する仕組みとしてViewStateを提供しています。ViewStateはキーバリュー形式でデータの出し入れができます。サーバーサイドで状態保持するためにViewStateを利用した場合、hiddenフィールドにエンコードした文字列を埋め込んでクライアントサイドに生成したページを送付します。クライアントサイドでユーザーの処理を受け取り、再びポストバックした際にサーバーサイドで埋め込まれたViewStateをデコードして以前のページの情報と照らし合わせて状態の差分を知ることができる様になります。

Web Formの基本はポストバックとViewStateです。Webアプリケーション開発者にはかなり癖の強い機能ですが、ここを押さえる事でWeb Form開発がグッと身近なものに感じやすくなるでしょう。

なお、冒頭では解説していませんでしたが、ASPXファイルは、ボタンやテキストボックス等のデザイン画面のコードを記載する.aspxファイルと、それらに対するアクションで発生するイベント処理を記載する.aspx.vb(または、.aspx.cs)ファイルに分離されます。この仕組みをコードビハインドと言います。デザインとコードを明確に分離する事で、開発生産性や保守性を向上させる事ができます。

続いて、AJAX機能について解説します。

著者
ナオキ(監修:山田祥寛)
WINGSプロジェクト

有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表:山田祥寛)。おもな活動は、Web開発分野の書籍/雑誌/Web記事の執筆。ほかに海外記事の翻訳、講演なども幅広く手がける。2011年3月時点での登録メンバは36名で、現在もプロジェクトメンバーを募集中。執筆に興味のある方は、どしどしご応募頂きたい。著書多数。
http://www.wings.msn.to/

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています