しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET MVC 3 開発入門 (7) - アクションの追加

ASP.NET MVC 3 開発入門 - インデックス

アクションとは ASP.NET MVC ではコントローラクラスに実装されていて、返り値の型が ActionResult であるパブリックメソッドのことを指します。アクションでは一般的なシナリオではフォームから送信されたデータのデータベースへの保存や、データベースからデータを取得して表示する画面の決定などを行います。

新しいアクションの作成は MVC フレームワークのインストールと同時にインストールされるコードスニペットを用いると簡単に作成できます。コードスニペット名は「action」となっているので、アクションを追加したいコントローラのファイルを開いて「action」とタイプしてください。インテリセンスが動作するので全てタイプする必要はありません。

その状態で Tab キーを押すと、以下のようなひな形が生成されます。

後はアクション名を入力し Enter キーを押して確定させるだけで追加は完了です。

public ActionResult NewAction()
{
    return View();
}

参照や登録などを実装する場合など、クエリパラメータやフォームからポストされた値がアクションでは必要となりますが、ASP.NET MVC にはモデルバインダという仕組みが用意されていて、ルーティング、クエリ、フォームパラメータなどに、アクションに指定された引数と同じ名前のパラメータがあれば、自動的にバインドしてくれます。

例を挙げてみると、HomeController クラスに以下のような string 型のパラメータ text と int 型のパラメータ page を持つアクションがあるとしましょう。

public ActionResult Action(string text, int page)
{
    return View();
}

このアクションの引数にパラメータを渡す一番簡単な方法は、以下のようにクエリパラメータ付きで呼び出すだけです。引数の名前とクエリパラメータのキー名が一致していることが分かっていただけると思います。

/Home/Action?text=string&page=1

普通はアクションを呼び出すには /Home/Action のようにパラメータなしで指定することが多いですが、このアクションではエラーページが表示されます。理由は簡単で string は参照型で、int は値型だからです。

モデルバインダはパラメータが見つからなかった時には null として扱ってくれるのですが、int は参照型ではないので Nullable として扱うか、デフォルト値を DefaultValue 属性で指定する必要がありました。
しかし C# 4.0 からは引数にデフォルト値を指定できるようになりましたので、以下のようにアクションの引数を修正することで表示できるようになります。

public ActionResult Action(string text, int page = 1)
{
    return View();
}

後はロジック、そしてビューを返すコードを追加すればアクションは完成です。

次回はアクションを実装する上で欠かせないモデルバインダについて説明を行いたいと思います。お疲れ様でした。