しばやん雑記

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

ASP.NET MVC 5.2 / Web API 2.2 / Web Pages 3.2 がリリースされました

個人的には ASP.NET vNext のほうが気になって仕方ないですが、ひっそりと ASP.NET MVC 5.2 や Web API 2.2 がリリースされてました。

NuGet Gallery | Microsoft ASP.NET MVC 5.2.0
NuGet Gallery | Microsoft ASP.NET Web API 2.2 5.2.0
NuGet Gallery | Microsoft ASP.NET Web Pages 3.2.0

Visual Studio 2013 Update 1 をインストール済みの環境であれば、NuGet でパッケージを一括更新するだけで問題ないはずです。最近はあまり更新がありませんが、一つずつ見ていくことにしましょう。

MVC 5.2

What’s New in ASP.NET MVC 5.2 | The ASP.NET Site

リリースノートは最近あまり書かず、殆どは CodePlex の Issue を見てくれと言うスタンスのようです。

気になる修正を挙げると、Knockout.js と ASP.NET MVC の組み合わせ時にモデルバインディングが腐る件 - しばやん雑記 で書いた jQuery のシリアライズ形式を MVC のモデルバインダが受け付けてくれないという件は、この 5.2 で修正されたみたいです。

ASP.NET MVC / Web API / Web Pages - View Issue #1564: FormValueProvider does not recognize array item members from jQuery posts

他にも SelectList / DropDownList 周りでグループや無効化への対応が追加されていたりしてます。

f:id:shiba-yan:20140702175128p:plain

SelectList のオーバーロードが倍ぐらいに増えています。

public class Master
{
    public static readonly List<Prefecture> Prefectures = new List<Prefecture>
    {
        new Prefecture { Id = 1, Name = "青森", Region = "東北" },
        new Prefecture { Id = 2, Name = "東京", Region = "関東" },
        new Prefecture { Id = 3, Name = "愛知", Region = "中部" },
        new Prefecture { Id = 4, Name = "大阪", Region = "関西" },
        new Prefecture { Id = 5, Name = "愛媛", Region = "四国" },
        new Prefecture { Id = 6, Name = "福岡", Region = "九州" },
    };

    public static readonly SelectList PrefectureList = new SelectList(Prefectures, "Id", "Name", "Region", (object)null);

    public class Prefecture
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Region { get; set; }
    }
}

こんなモデルを用意して、普通に DropDownList/DropDownListFor で使うと optgroup を使った形でレンダリングが行われます。

f:id:shiba-yan:20140702182021p:plain

あと、Remote 属性を特定のエリア内で使った場合、ルートに用意されたアクションを実行出来ない件も修正されました。

public class FormModel
{
    // /AreaName/User/Exists を見に行く
    [Remote("Exists", "User")
    public string UserId1 { get; set; }

    // /User/Exists を見に行く
    [Remote("Exists", "User", AreaReference.UseRoot)
    public string UserId2 { get; set; }
}

Remote 属性のプロパティして AreaReference という enum が追加されたので、これを使って現在のエリアかルートなのかを指定できます。

Web API 2.2

What's New in ASP.NET Web API 2.2 | The ASP.NET Site

Web API 2.2 では OData v4 の対応とクライアントライブラリの Windows Phone 8.1 対応が目玉っぽいです。

いつも通りですが Web API は関連する Issue が多すぎるので、詳しい人に任せたいと思います。

ASP.NET MVC / Web API / Web Pages - Issues

元々、自分はあまり Web API には詳しくないので(

Web Pages 3.2

What's New in ASP.NET Web Pages 3.2 | The ASP.NET Site

Web Pages に関しては、特に目立った更新内容が無さそうです。強いてあげれば、エラーメッセージが一部わかりやすくなったみたいですね。

ASP.NET MVC / Web API / Web Pages - View Issue #1838: Razor - Cannot trigger content mode/need better error message