ASP.NET MVCプロジェクトとWebフォームページ
このエントリは実験的なもので、実用的な意味はあまりありません。それを前提にお読みください(w
ASP.NET MVCプロジェクトは一見従来のWebフォームのプロジェクトと何もかも違っているように見えます。
でも、実際にはASP.NET MVCプロジェクトの中でWebフォームページも使えるんだ、ということを確認してみましょう。
まず、ASP.NET MVCプロジェクトを適当につくります。デフォルトの設定でいいでしょう。
できたプロジェクトに「新しい項目の追加」でWebフォームを追加します。
こんなふうにWebフォームがプロジェクトに追加されると思います。
追加した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フォームが必要になる、という状況は考えにくいですが、混在自体は可能ということは覚えておいてもいいと思います。