しばやん雑記

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

リリースノートに書いていない ASP.NET MVC 4 の新機能

毎回新しいアセンブリが出るたびにインテリセンスなどで変更点が無いか調べてます。リリースノートに書いてない変更はやっぱりありますよね。

新しいスキャフォールディングテンプレート

今まではスキャフォールディングのテンプレートとして

  • 空のコントローラ
  • Entity Framework を使用した、読み取り/書き込み操作とビューのあるコントローラ
  • 空の読み取り/書き込み操作とビューのあるコントローラ

の 3 つがありましたが、MVC 4 ではもう一つ

  • Ajax grid controller with read/write actions and views, using Entity Framework

が追加されていました。早い話が Ajax で実装された GridView を使うためのテンプレートです。

気になるのでさっそく使ってみます。今回は、以下のようなモデルを用意しました。

public class Brother
{
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }

    [Required]
    [Range(0, 100)]
    public int Level { get; set; }
}

そしてもうお馴染みとなったコントローラの追加ダイアログで、コントローラやビューなどを自動生成してもらいます。テンプレートは当たり前ですが [Ajax grid controller with read/write actions and views, using Entity Framework] を選びます。

自動生成が終わったら F5 押して実行してみます、テンプレートがかっこいいですね。Ajax と名前についているように、この画面にある機能は全部 Ajax で画面遷移なしで行えます。

とりあえずダミーデータを登録してみました。当然ながら登録や編集をインラインで行うことが出来ます。

GridView としては当たり前の機能なんですが、ページ繰りや並べ替えなどの機能も自動で生成してくれます。並べ替えの実装は ObjectQuery を作って頑張っていました。このあたりは LINQ だけで完結できないので辛いですよね。

今はレベルの高い順にソートしています。当然ながら Ajax です。

スタイルシートを弄れば、GridView のように仕上げるのも簡単そうですね。

AllowAnonymous 属性

今までは特定のメソッドだけ認証なしにしたい場合には Authorize 属性をそのメソッド以外に付けるという面倒な作業が必要でしたが、MVC 4 では認証なしであることを宣言する AllowAnonymous 属性が追加されたので、クラスに Authorize 属性を付けて一部のメソッドに AllowAnonymous 属性を付けるという方法で実現できます。

[Authorize]
public class Mvc3Controller
{
    // このアクションだけはログイン不要
    [AllowAnonymous]
    public ActionResult NoAuthorizeAction()
    {
        reutrn View();
    }
}

knockout.js が標準搭載、Microsoft AJAX 周りが削除

knockout.js が NuGet パッケージとしてデフォルトで入るようになりました。そして、今まで使うところがなかった Microsoft AJAX 関連ファイルがごっそりと無くなっています。

しかし、AjaxHelper が jQuery 使うように書き換えられたわけではないので、AjaxHelper を使うときには CDN を参照するようにすればいいと思います。

他には CancellationTokenModelBinder とかいう、どう考えてもタスクベース非同期コントローラ向けっぽいモデルバインダや Microsoft.Web.Optimization という、CSS と JS の最適化を行うクラスとかありましたが、使いかたが分からないので保留としておきます。