アーカイブ

Archive for 2009年6月

ASP.NET MVCプロジェクトとWebフォームページ

2009年6月29日 コメントを残す

このエントリは実験的なもので、実用的な意味はあまりありません。それを前提にお読みください(w

ASP.NET MVCプロジェクトは一見従来のWebフォームのプロジェクトと何もかも違っているように見えます。
でも、実際にはASP.NET MVCプロジェクトの中でWebフォームページも使えるんだ、ということを確認してみましょう。

まず、ASP.NET MVCプロジェクトを適当につくります。デフォルトの設定でいいでしょう。

MVCプロジェクトの作成

できたプロジェクトに「新しい項目の追加」でWebフォームを追加します。
こんなふうにWebフォームがプロジェクトに追加されると思います。

MVCプロジェクトにWebForm1.aspxを追加

追加したWebフォームにテキストボックス、ボタン、ラベルを追加します。

コントロールを追加

ボタンをダブルクリックして、コードビハインドにボタンをクリックしたらテキストボックスの中身をラベルに表示するプログラムを記述します。
まぁ、よくあるHello Worldプログラムです。

protected void Button1_Click(object sender, EventArgs e)
{
    Label1.Text = TextBox1.Text;
}

これで動かしてみてもいいんですけど、きちんとMVCプロジェクトも動いている中でWebフォームが動くことを確認するために、マスターページ(/View/Shared/Site.Master)にWebFormへのリンクを記述してみましょう。

リンクの挿入

さて、これでデバッグを開始すると、MVCプロジェクトのいつものサンプルのトップページが表示されます。
ここで、WebFormへのリンクをクリックします。

サンプルのトップページからリンクをクリック

作成したWebフォームが表示されますから、ここでテキストボックスに適当な文字を入力してボタンをクリックし、動作に問題ないことを確認しましょう。

ボタンクリック前 ボタンクリック後

まぁ、ここで気になるのは、ルーティングとの兼ね合いで問題はでないの?というところあたりでしょうけど、ルーティングはリクエストされたURLに対するファイルの存在チェックをしてまして、ファイルが存在する場合はそちらが優先され、ルーティングの設定は無視されます。
なので、Webフォームのポストバックで問題がでることはありません。

あと、WebフォームからMVCプロジェクト内のマスターページを利用する(その場合、新しい項目の追加でWebコンテンツフォームを選択する必要がある)ことはできなくはないですが、HTMLヘルパーの動作でエラーになります。
HTMLヘルパーを利用しないようなマスターページを別に作るほうがよさそうです。

ASP.NET MVCプロジェクトの中でどうしてもWebフォームが必要になる、という状況は考えにくいですが、混在自体は可能ということは覚えておいてもいいと思います。

カテゴリー:.NET, ASP.NET 備忘録