しばやん雑記

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

ASP.NET MVC 4 Beta が公開されました

Download ASP.NET MVC 4 Beta from Official Microsoft Download Center

Developer Preview が BUILD で公開されてから結構時間がかかりましたが、ようやくベータが公開されましたね。どうやら Visual Studio 2010 SP1 専用のようで、.NET 4.5 DP がインストールされていると蹴られてしまいました。

削除にしばらく時間がかかるので、その間にベータで追加された機能をリストアップ。

ベータで追加されたっぽい機能

  • ASP.NET Web API が追加
    • RESTful な API を簡単に実装。Entity Framework だとコード書く必要がほぼない
    • Web Pages のように単体でも使えるようになるっぽい
    • WCF Web API とは完全に別物なので注意
  • プロジェクトテンプレートが追加
    • Web API、Single Page Application が追加された
    • Single Page Application では knockout.js を使ってる!
  • フルスキャフォールディングのテンプレートも追加
    • Empty API Controller
    • API controller with empty read/write actions
    • Single Page Application with read/write actions and views, using Entity Framework
    • 基本的に Web API を使うもの

リリースノートが公開されたら追記します。されたので追記しました。

ASP.NET MVC 4 : The Official Microsoft ASP.NET Site

基本的には Web API と Single Page Application (略称:SPA) の追加ぐらいですね。あまりにもひっそりとしすぎているのが Display Modes の変更でしょうか。

DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("iPhone")
{
    ContextCondition = (context =>
        context.GetOverriddenUserAgent().IndexOf("iPhone", StringComparison.OrdinalIgnoreCase) >= 0)
});

DP では DisplayModes クラスを使っていましたが、Beta からは DisplayModelProvider を使うのが正しいようです。しかし、このシングルトンは微妙に見た目が悪いですね。正式版ではまた修正されるかも。

そして Release Notes には書いてませんが Web Pages 2 (Razor) にも新機能が追加されているようです。

ASP.NET MVC 4 Beta Released! - Jon Galloway

Jon Galloway 氏のエントリによると、以下のような機能が追加されているようです。

  • URL Resolution - Support for ~/ syntax
  • Conditional attribute rendering

今までは静的なリソースを参照する時には Url.Content ヘルパーを使うのが一般的でした。

<link type="text/css" rel="stylesheet" href="@Url.Content("~/Content/Site.css")" />

これが Web Pages 2 では Url.Content が不要になりました。

<link type="text/css" rel="stylesheet" href="~/Content/Site.css" />

非常にシンプルになっていい感じですね。

そしてもう一つは属性の条件付き出力となります。今までは if で属性を出し分けしていました。

<div @if (errorClass != null)
     {
        <text>class="@errorClass"</text>
     }></div>

タグの中に if を書くのは見た目も悪いし、そもそもわかりにくいですね。Web Pages 2 では以下のようにシンプルに書けるようになりました。

<div class="@errorClass"></div>

面白いのが、この例の場合 errorClass が null の場合に出力されるタグに余計なスペースが出力されないことです。

<div></div>

ここまでタグや属性を認識しているのなら、個人的には Minify が欲しいですね。