ルーティング
最近のWebアプリケーションでは、「Cool URI」と呼ばれるURLの設計を採用しているものが多い。Cool URIとは、たとえば「書籍情報を表示するページ」において、「idが123の書籍情報を表示する」という場合であれば、「http://www.example.com/bookinfo?bookid=123」という形式ではなく、「http://www.example.com/bookinfo/123」という形式にする、というものだ。このようなCool URIを意識したルーティング処理は、もちろん従来のASP.NETでも実現できるのだが、ASP.NET MVCでは、非常に簡単に実現できるようになっている。
それではASP.NET MVCでルーティング処理を実装する方法を見ていくことにする。
先ほど作成したばかりのASP.NET MVC Webアプリケーションを実行し、表示されたトップページの右上にある「About」というリンクをクリックしてみよう。Aboutのページに遷移し、Webページの内容が表示されるはずだ。ここでURLを見てみると「http://localhost:1234/Home/About」というURLになっていることが分かる。
今行われた処理の流れを追ってみるために、「/Controllers/HomeController.cs」を見てみると、次のようなコードになっている。
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult About()
{
return View();
}
}
「/Home/About」というURLにアクセスされたときに行われた処理は、HomeControllerクラスのAboutメソッドが呼び出され、そこから「/View/Home/About.aspx」を使用してページの描画がなされた、という流れになっている。
つまり、ASP.NET MVCの標準的な設定では、URLによってリクエストを処理するControllerクラスとメソッドが決定される仕組みになっているわけだ。そして、ControllerクラスとViewは一対多になっていて、呼び出されたControllerクラスのメソッドによって、呼び出すViewが決定される。「どのControllerクラスのどのメソッドが呼び出されるのか」は、リフレクションを用いて解決されるため、設定ファイルにルーティング情報を記述したりする必要はない。また、Controllerのメソッドから呼び出されるViewも、明示的に指定されない限りは命名規則から自動的に推測される。
こういった暗黙の規則が分かっていれば、「/Example/Hello」というURLで、「Hello World」を表示するページを作成することも容易だろう。まずExampleControllerクラスを追加し、そこにHelloメソッドを追加する。そして、「/View/Example/Hello.aspx」を追加すればよい、というわけである。
ちなみにControllerからViewにデータを渡すときの最もシンプルな方法は、ViewDataを使用することだ。たとえば、トップページを見てみると「Welcome to ASP.NET MVC!」というメッセージが表示されているが、このメッセージの文字列は「/Controllers/HomeController.cs」のコードの中で記述されている。具体的には次の箇所だ。
ViewData["Message"] = "Welcome to ASP.NET MVC!";
そして、ControllerのViewDataに渡された文字列は、Viewで取得することができる。具体的には、「/Views/Home/Index.aspx」の次の箇所だ。
<%= Html.Encode(ViewData["Message"]) %>
ModelをベースとしてControllerとViewを連携させる方法もあるが、とりあえずはViewDataから試してみるとよいだろう。