前回の投稿で言及したASP.NET MVC と ASP.NET Dynamic Data の同一Webアプリ内での同居について、その実践・実例。
自分の場合は次のように進めた。
内容的には下記と同じ。
どっとねっとふぁんBlog「通常のASP.NETとASP.NET Dynamic DataとASP.NET MVCを組み合わせる」
http://dotnetfan.org/blogs/dotnetfanblog/archive/2008/10/02/2823.aspx
まずは、新規に、ASP.NET MVC と ASP.NET Dynamic Data の Webアプリプロジェクトを、それぞれ別々に作成。
次に、ASP.NET MVC プロジェクトへ、ASP.NET Dynamic Data プロジェクトのファイルを追加していった。
もう少し具体的に書くと、ASP.NET Dynamic Data プロジェクトの ~/DynamicData フォルダを、ASP.NET MVC プロジェクトを開いている Visual Studio のソリューションエクスプローラ上へ、エクスプローラを使ってドラッグ & ドロップすることでまるごと追加。
あと、ASP.NET Dynamic Data プロジェクトの ~/Default.aspx は MVC プロジェクトのそれと名前がかぶるので Tables.aspx に変更の上(※もちろん、クラス名も適宜手作業で変更)、~/Site.master、~/Site.css と一緒にエクスプローラを使って MVC プロジェクトへドラッグ & ドロップで追加。
続けて、MVC プロジェクトの参照設定に、Dynamic Data の動作に必要なアセンブリへの参照を、Dynamic Data プロジェクトの構成を横目で見ながら追加。
web.config には、同じく Dynamic Data プロジェクトの web.config を参考にしつつ、configuration/system.web/pages/controls に <add ragPrefix="asp" namespace="System.Web.DynamicData" .../> の行を追加。
最後に、MVC プロジェクトの Global.asax.cs に、Dynamic Data のためのルート設定を追加。
すなわち、MVC プロジェクトの Global.asax.cs 中、RegisterRoutes static メソッド内の先頭に、Dynamic Data プロジェクトの Global.asax.cs 中の RegisterRoutes static メソッドの内容をまるごとコピーして挿入した。
以上でとりあえず完成。
別途エンティティ用意して Global.asax.cs 中でデータモデル登録したりスキャフォールディング有効にしたりすれば、~/Tables.aspx を開くことで Dynamic Data サイトとして動作していることが確認できる。
なお、外部CSSファイルが MVC と Dynamic Data とで別々だったりするので、これを統一化したり、いろいろとまだまだ
外見の微調整が必要である。
ちょっとしんどいのは、マスターページが MVC と Dynamic Data とで別々であること。
MVC のマスターページは、System.Web.Mvc.ViewMasterPage クラスなので、Dynamic Data と共用するのは無理っぽい。
求む良いアイディア、といったところ。
むしろ、
Dynamic Data for MVC のリリースを待つべきなのか。
あるいは、ASP.NET MVC でもRCないしはRTMでは Dynamic Data とは方向性がちょっと違うものの、ビューのスキャフォールディングサポートがあるので、Dynamic Data はあきらめて、MVC のスキャフォールディングサポートだけでこなしても、そんなに生産性が落ちることもないかもしれない(本エントリのようにごちゃごちゃやるくらいなら)。