CodeZine(コードジン)

特集ページ一覧

颯爽登場!ASP.NET MVC 3の概要を押さえる

ASP.NET MVC3入門(1)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2011/03/01 14:00

ダウンロード ダウンロード (994.9 KB)

目次

Razor構文の導入とASPXの選択基準

 ASP.NETの新しいビューエンジンとしてRazorがあります。Razorとは、"@"を頭文字に記載することで利用できる構文で、ヘルパークラスなどの活用によりシンプルで効率的な記法ができるのが最大の特徴です。従来のASPXによるビューエンジンももちろん選択できますので、開発者にとって利用しやすい方を選択できることになります。

MVC 3プロジェクト作成時のダイアログ

 MVC 3をインストール後、実際に新規プロジェクトを作成すると、図3のようなダイアログが表示されます。
 

図3 プロジェクト作成時に表示されるダイアログ
図3 プロジェクト作成時に表示されるダイアログ

 このダイアログでは、空のMVC 3プロジェクトテンプレートか、最低限の動作環境が記述されているプロジェクトテンプレートかの選択の他、単体テストプロジェクトの付加や、ビューエンジンの選択もできます(図4)。
 

図4 ビューエンジンの選択
図4 ビューエンジンの選択

 既定はASPXですが、Razorも選択できるので作成するアプリケーションごとにビューエンジンを切り替えて作成などもできます。

 Razorについてはすでに各種記事で紹介されているのでご存知の方も多いかと思いますが、本稿ではMVC 3においてRazorを使うメリットとデメリット、ASPXを使うメリットとデメリットを見てみたいと思います。

 まず、それぞれのビューエンジンの構文です。

Razor構文とASPX構文
// Razor構文
@ViewBag.Message

// ASPX構文
<%: ViewBag.Message %>

 上のRazor構文は"@"1文字で記載できていますが、ASPX構文では "<%: %>"と、スペースを省いても5文字入力する必要があります。これが良くも悪くもRazorを使うかASPXを選択するかのポイントの一つになります。アプリケーションを作る中で"View"は何かと編集します。その中で日常的に使うにはタイプ数を減らして流れに乗ったコーディングを行いたい開発者も多いはずです。そんな時に1文字で済むRazor構文は魅力的ではないでしょうか。

 他にもデザインビューを利用できるかどうか、サーバーコントロールを利用できるかどうかという部分も選択のポイントになります。Razorを選択した場合はサーバーコントロールを利用できないため、WebFormや、Dynamic Dataのハイブリッドアプリケーションはできないということになります。

 まとめると以下のようになります。

RazorとASPXによるビューエンジンの比較
  Razor ASPX
総タイプ量 少ない 若干多い
サーバーコントロールの利用 できない できる
Dynamic Dataの同一プロジェクト利用 できない できる
デザインビューの確認 できない できる
パフォーマンス 若干遅い 今までと変わらない

 なお、RazorとASPXそれぞれのパフォーマンスは、ほぼ変わらないようです。話題のRazorはもちろん魅力的なビューエンジンではありますが、ビューエンジンの違いを把握したうえで開発者ならびに、開発チームにあった方をビューエンジンとして選択するようにしましょう。

ViewDataからViewBagへ

 MVC 2までは、ViewModelやViewDataを利用してコントローラーからビューへ値を渡していました。MVC 3では、ViewBagと名前を統一してコントローラー側とビュー側両方で同一の名前のオブジェクトとして利用できるようになりました。

 ViewBagは動的なコレクションです。コントローラー側で下記のように記載できます。

コントローラー側のViewBagの設定例
ViewBag.Name = "ナオキ";
ViewBag.Age = 28;
ViewBag.娘 = "環";
ViewBag.DateTime = DateTime.Now;
ViewBag.LikeColor = "blue";

 お気づきでしょうか。ViewBag."XXX"のXXXの部分は利用者が任意の名前を付けて値を格納できます。つまり、格納したい値を複数指定できるのでコントローラーからビューへ渡したい分だけ指定できます。ビュー側で値を引き出すには下記のような記載になります。

ビュー側のViewBagの設定例
<h3>ViewBagサンプル</h3>
<p>
   名前:<b>@ViewBag.Name</b><br />
   年齢:<b>@ViewBag.Age</b><br />
   娘:<b>@ViewBag.娘</b><br />
   日時:<b>@ViewBag.DateTime</b></br >
   色:<b><font color="@ViewBag.LikeColor">青</font> </b>
</p>

 コントローラー側と同じ記載で表示できるので利用しやすいです。実行結果は図5のとおりです。

図5 ViewBagを利用した値渡し実行例
図5 ViewBagを利用した値渡し実行例

 便利なViewBagですが、一点注意点があります。ViewBagは何個でも任意の名前のフィールドで値を格納できる特徴の代償としてインテリセンスが効きません(ビュー側でもViewBag.XXXのXXX部分は手入力が必要)。この点だけ注意が必要です。

セッションステートの指定

 MVC 2まではすべてのコントローラーでセッションが使用されていました。MVC 3ではSessionState属性にSessionStateBehavior列挙体を指定することで、セッションレスで利用することもできるようになりました。

SessionStateBehaviorの値
設定値 概要
Default 従来のコントローラー同様の要求に応じたセッションステートを使用
Required 読み書き可能なセッションステートを使用
ReadOnly 読み取り専用セッションステートでコントローラーを使用
Disabled セッションレスでコントローラーを使用

 指定は属性で宣言するだけです。

セッションレスのコントローラーの指定
using System.Web.SessionState;

    [SessionState(SessionStateBehavior.Disable)]
    public class HomeController : Controller
    {
    }

 セッションを使用しない場合はセッションレスに指定することで運用環境でのトラブル防止にもつながる部分になると思います。

AllowHTML属性

 MVC 3になり属性クラスも多く追加されています。今回ピックアップするAllowHTML属性はHTML文字列を有効化したい場合に使用します(MVCでは、デフォルトですべての文字列をフレームワーク側がエスケープしてただの文字列として処理します)。

 例えば、Blogやフォーラムの編集画面作成時などでは活躍する属性です。

セッションレスのコントローラーの指定
public class Blog
{ 
    public string Name { get; set; }
    public string Title { get; set; }

    [AllowHtml] 
    public string Content { get; set; }
    ... 
}

 指定したプロパティまたはクラスでのみHTML文字列を有効化できます。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:ASP.NET MVC3入門

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

  • WINGSプロジェクト ナオキ(ナオキ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5