ASP.NET and Web Tools 2012.2 が公開された片隅で、Web Forms 向けのスキャフォールディング機能がプレビューリリースされていました。
これを使うと MVC のようにモデルクラスを作成するだけで CRUD 操作が可能なフォームを生成してくれるらしいです。これは面白そうですね。
という訳で、早速試してみたいと思います。まずは Visual Studio の拡張機能をインストールしましょう。以下のリンクからダウンロード出来ます。
Microsoft ASP.NET Scaffolding extension
この拡張機能をインストールすると、ソリューションエクスプローラーの項目右クリックで「Scaffold...」というメニューが出てきます。
インストールが終わったらプロジェクトを作っていきましょう。Web Forms なのでもちろん「ASP.NET Web フォーム アプリケーション」を選びます。プロジェクトが作成出来たら、必要なパッケージを NuGet からインストールします。
NuGet Gallery | ASP.NET Web Forms Scaffold Generator 0.1.0-pre
Install-Package Microsoft.AspNet.Scaffolding.WebForms -Pre
いろんなパッケージがインストールされますが、そのあたりは気にせずに進みます。
次にモデルクラスを作成していきます。まずは Models ディレクトリを作って、その中に以下のような簡単なクラスを作成します。
public class Product { [ScaffoldColumn(false)] public int Id { get; set; } public string Name { get; set; } public int Price { get; set; } } public class ProductContext : DbContext { }
残念ながら、MVC のように DbContext クラスを自動生成はしてくれないので、DbContext を継承した空っぽのクラスを追加しておきます。そして Id という名前のプロパティに対してもスキャフォールディングでフォームを作ってしまうので、ScaffoldColumn 属性で対象外にしておきます。
これで準備が完了したので、ソリューションエクスプローラーのプロジェクトを右クリックして「追加」->「Scaffold...」の順に選択します。すると以下のようなダイアログが表示されるので、そのまま「Add」をクリックします。
すると、次はモデルクラスと DbContext クラスを選択したりするダイアログが表示されます。このあたりは MVC っぽいですね。
"Model class" と "Data context class" に先程作成した Product と ProductContext を指定したら「Add」をクリックするとビューが生成されます。
実際にスキャフォールディングで生成されたビューは以下のような感じで保存されています。見るだけで分かると思いますが "Views/{モデルクラス名}/" という形で作成されます。
実際に実行してみると、MVC と同じような感じのフォームが表示されました。
ちゃんと一覧の表示や編集、削除など一通りの機能が動きます。そしてひっそりとクライアントサイド検証も有効になっているようです。
このフォームの自動生成には ASP.NET DynamicData が使われているようでした。そしてテンプレートを弄ることで、細かく表示を変更できそうな感じがします。
注意点としては ASP.NET 4.5 の新機能である Strongly Typed FormView を使っているので、.NET Framework 4.5 じゃないと動作しない点です。しかしながら、これを使えば Web Forms はあと 3 年は余裕で戦えそうな感じです。