しばやん雑記

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

ASP.NET Web Forms でもスキャフォールディングを使ってみる

ASP.NET and Web Tools 2012.2 が公開された片隅で、Web Forms 向けのスキャフォールディング機能がプレビューリリースされていました。

Pre-release of ASP.NET Scaffolding with a Web Forms scaffold generator - .NET Web Development and Tools Blog - Site Home - MSDN Blogs

これを使うと MVC のようにモデルクラスを作成するだけで CRUD 操作が可能なフォームを生成してくれるらしいです。これは面白そうですね。

という訳で、早速試してみたいと思います。まずは Visual Studio の拡張機能をインストールしましょう。以下のリンクからダウンロード出来ます。

Microsoft ASP.NET Scaffolding extension

この拡張機能をインストールすると、ソリューションエクスプローラーの項目右クリックで「Scaffold...」というメニューが出てきます。

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

インストールが終わったらプロジェクトを作っていきましょう。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」をクリックします。

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

すると、次はモデルクラスと DbContext クラスを選択したりするダイアログが表示されます。このあたりは MVC っぽいですね。

"Model class" と "Data context class" に先程作成した Product と ProductContext を指定したら「Add」をクリックするとビューが生成されます。

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

実際にスキャフォールディングで生成されたビューは以下のような感じで保存されています。見るだけで分かると思いますが "Views/{モデルクラス名}/" という形で作成されます。

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

実際に実行してみると、MVC と同じような感じのフォームが表示されました。

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

ちゃんと一覧の表示や編集、削除など一通りの機能が動きます。そしてひっそりとクライアントサイド検証も有効になっているようです。

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

このフォームの自動生成には ASP.NET DynamicData が使われているようでした。そしてテンプレートを弄ることで、細かく表示を変更できそうな感じがします。

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

注意点としては ASP.NET 4.5 の新機能である Strongly Typed FormView を使っているので、.NET Framework 4.5 じゃないと動作しない点です。しかしながら、これを使えば Web Forms はあと 3 年は余裕で戦えそうな感じです。