特集:ASP.NET 4概説(後編) ASP.NET 4/ASP.NET MVC/Dynamic Dataの新機能 山田 祥寛2010/07/13 |
|
ASP.NETアプリケーション開発者のためのVisual Studio 2010(以降、VS 2010)の新機能として、前編では開発環境、サーバ・コントロール、クライアントサイド開発という観点から概観した。
後編となる今回では、引き続きASP.NET 4のコア機能、そして、ASP.NET MVC、Dynamic Dataなど周辺技術の新機能について解説していく。
■ASP.NET 4コアの新機能
まずは、ASP.NET 4のコア部分の変更点から見てみよう。
●ユーザーフレンドリなURLを設計する ― ルーティング機能の強化 ―
Webアプリケーションにおいて、ルーティングとは、リクエストURLとあらかじめ決められた条件設定(=ルート)に従って、実際の処理を行うページ(=クラス)を振り分ける機能のこと。ルーティングを利用することで、公開URLと、物理的なファイル構造とを分離できるため、エンド・ユーザーにとってより分かりやすいURL階層を設計できるようになる。
もっとも、ルーティングというと、ASP.NET MVCだけの機能と思われている節もある。なるほど、ASP.NET MVCではルーティング機能がデフォルトで有効になっているが、ASP.NET 3.5では(使えはするものの)相応の準備をしないと利用できなかったし、そもそも準備のハードルは高かった。実質、ASP.NET 3.5でルーティングを利用していた諸氏はさほど多くはなかったはずだ。
しかし、ASP.NET 4では新たにMapPageRouteメソッドが追加され、ルーティング利用のハードルは一挙に下がった。具体的なコード例を見てみよう。
|
||
Blogルートを設定するためのコード(上:Global.asax.cs、下:Globa.asax.vb) |
実にこれだけのコードで、
http://www.wings.msn.to/Blog/2010/06/25
のようなリクエストが、
~/App/Details.aspx
に振り分けられる。ルーティング先(上記の例ではDetails.aspxファイル)でルート・パラメータ(例では「/2010/06/25」の部分)を取得するのも簡単だ。下記のコードはそのコード例。
|
|
ルート・パラメータ取得のコード(C#の場合) |
このように、式構文「<%$RouteValue:...%>」で宣言的に取得することも、RouteDataオブジェクトでプログラム的に取得することもできる。
さらに、式構文「<%$ RouteUrl %>」を利用すれば、ルート定義に基づいて動的にURLを生成することも可能だ。以下のコードは「~/Blog/2010/06/25」へのリンクを生成するためのコード例である。
|
|
ルート定義からリンクを生成するコード |
●クライアントサイド開発に最適化されたクライアントID ― ClientIDModeプロパティ ―
クライアントIDとは、クライアントに最終的に出力されるid属性のこと。ASP.NETではもともと、サーバID(=サーバ・コントロールのIDプロパティ)を基に、クライアントIDを自動生成していた。
例えば、下の図のような例を考えてみよう。
クライアントIDの決まり方(従来) |
上の図を見ると分かるように、マスター・ページ配下のコンテンツ・ページに配置されたテキストボックスtxtNameであれば、クライアントIDは「ctl00_MainContent_txtName」となるし、ユーザー・コントロールのさらに配下のテキストボックスtxtNameであれば「ctl00_MainContent_cli_txtName」となる。クライアントIDが重複しないよう、ASP.NETが階層に応じたラベル付けを行っているわけだ。
これは一見便利な機能に思えるが、クライアントサイド開発を難しくする原因でもある。例えば、ユーザー・コントロール配下のテキストボックスにJavaScriptコードからアクセスしようとしたら、以下のような埋め込みブロック混在のコードを記述しなければならないだろう。
|
|
ユーザー・コントロール配下のテキストボックスにアクセスするJavaScriptコード(従来) |
ユーザー・コントロールを設計した時点では、そもそもユーザー・コントロールのID値は決まっていないので、クライアントIDをハード・コーディングすることはできないのだ。このように、サーバ/クライアント双方のコードが混在した状態が好ましくないのはいうまでもない。
そこでASP.NET 4では、クライアントIDの生成方法を設定するためのClientIDModeプロパティが追加されている(設定できる値は下記の表を参照)。
設定値 | 概要 |
AutoID | 自動的にID値を設定(従来の形式) |
Inherit | 親ページ/コントロールの設定を継承 |
Static | サーバIDで固定 |
Predctable | ClientIDRowSuffixプロパティの値から生成 |
ClientIDModeプロパティの設定値 |
例えば、先ほどの例であれば、テキストボックスtxtNameのClientIDModeプロパティに対して、ClientIDModeプロパティに「Static」を指定すればよい。これによって、テキストボックスtxtNameのクライアントIDは、そのまま「txtName」となる。もちろん、Staticオプションを利用した場合、アプリケーション開発者はページ全体でクライアントIDが衝突しないよう配慮する必要がある。
Predictableオプションは、GridViewやListViewなどのリスト・コントロールで利用することを想定したオプションである(predictableは「予測可能な」という意味)。具体的には、下記のコード例を見てほしい。
|
|
Predictableオプションの利用例 |
Predictableオプションを利用する場合には、ClientIDRowSuffixプロパティも併せて指定する必要がある。ClientIDRowSuffixプロパティは、クライアントIDの接尾辞として使用するフィールドの名前を表すものだ。
上記のコード・リスト「Predictableオプションの利用例」の例であれば、isbnフィールドが「978-4-7980-2004-4」である場合、ラベルlblTitleのクライアントIDは「grid_lblTitle_978-4-7980-2004-4」のようになる(ちなみに、ASP.NET 3.5までは「grid_ctl01_lblTitle」のようなIDが自動生成されていた)。
このように、Predictableオプションでは、クライアントIDを自動生成するものの、予測可能な値を生成してくれるわけだ。
続いて次のページでは、SEOの強化、さらにASP.NET MVCの新機能を説明する。
INDEX | ||
[特集]ASP.NET 4概説(前編) | ||
ASP.NET開発者のためのVisual Studio 2010新機能 | ||
1.Visual Studio 2010の新機能 | ||
2.サーバ・コントロールの新機能 | ||
3.クライアントサイド開発の変更点 | ||
[特集]ASP.NET 4概説(後編) | ||
ASP.NET 4/ASP.NET MVC/Dynamic Dataの新機能 | ||
1.ASP.NET 4コアの新機能 | ||
2.ASP.NET MVCの新機能 | ||
3.ASP.NET Dynamic Dataの新機能 | ||
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|