2010年8月19日木曜日

MVC HTML5 Toolkit を MVC3 Preview1のRazorで使う

ASP.net MVC HTML5 Helpers Toolkit

ナオキさんに勧められたので調べてみました。

ナオキにASP.NET(仮) : MVC HTML5 Toolkit が CodePlex にて公開!

mvchtml5

まずは、上記サイトからソースとAssemblyをダウンロードしてみました。名前空間がSystem.Web.Mvc.Html5というところがムフフなポイントですね。

ソースがあまりにもシンプルで短いので見てみるのをお勧めします。で、見てみてサンプルを動かしてみました。

面白いね~。3大派手機能のうちVideo/Audioのタグには対応。あとはCanvasも同じように作ればいいね!

ベースとなるHtml5TextBoxとHtml5RangeNumberはModelStateを取り出してないから、値がバインドしてこないです。ちょっと残念。InputHelperを使ってるHtml5TextBoxForHelperはViewData.ModelState.TryGetValueでちゃんとバインドしてるから、いろいろ試しながら作ってるのか、意図的にバインドしないようにしてる感じです。input type="range"もバインドしてくれていいと思うけどな~。せっかくhtmlHelper.GetModelStateValueも用意してるんだし。

サンプルのMVCプロジェクトではSite.MasterでDOCTYPE htmlの出力じゃないけど、そんなの気にせずSafari,Chromeはちゃんとレンダリングしてくれるのがすばらしい。

Dean Hume - ASP.net MVC HTML5 Toolkit

ちなみにMVC2用だとうたってますが、そんなの気にせずMVC 3 Preview1で使ってみましょう。作者のサイトに書かれてる通り、参照設定に追加して、Global.asaxにおまじない。

mvchtml5_2

もちろんRazorなので、NamespaceをWebPageからHtmlHelperへの拡張メソッドが参照できるように、Global.asaxに以下のように追記。

protected void Application_Start()
{
  AreaRegistration.RegisterAllAreas();
  CodeGeneratorSettings.AddGlobalImport("System.Web.Mvc.Html5");

  RegisterGlobalFilters(GlobalFilters.Filters);
  RegisterRoutes(RouteTable.Routes);
}

ページに直接usingとして書いてもいいですが、すべてのページに書くのは馬鹿らしいじゃないですか。Tumblrにも書いたと思いますが、Preview1ではWeb.configのsystem.web/pages/namespacesはみてくれないです。そこはRTMまでには解決されることでしょう。

前回作ったサルベージ用アプリに追加してみる。

@using(Html.BeginForm("Index","Home",FormMethod.Get)) {

  @Html.TextBox("q")

  <input type="submit" value="検索" />

  @Html.Html5Range(1, 100 , 0, 23, null).AsHtml()
}

AsHtml拡張メソッドもがある前提です。

対応してるChromeだと↓こんな感じでちゃんとRangeコントローラが出てきます。

mvchtml5_3

Firefoxだとまだ対応してないので、type属性無視してTextboxがそのまま表示されます。

mvchtml5_4

お手軽でとてもいいじゃないですか!これは楽しい!

あと、個人的に面白いと思うのが↓。

aspnet - Release: Sprite and Image Optimization Framework

地味な感じがするけど、ASP.NETらしさ爆発じゃないですかね~。