- ベストアンサー
ASP.NET MVCのホームページ表示について
ASP.NET MVC2 Webアプリケーションを新規作成した場合 http://localhost:○○/Home/index だと、デフォルトのホームページ「マイ MVC アプリケーション」が表示されますが、 http://localhost:○○/Home/index.aspx とaspx拡張子をつけると「リソースが見つかりませんでした。」といわれます。 従来型のASP.NET Webアプリケーションに慣れている者としては上記挙動が理解できません。 「逆では?」と感じられます。 なぜ上記のような結果になるのでしょうか? ご案内の方がおられましたらよろしくご教示くださいませ。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
MVCのルーティングの動きがどうなっているかを理解する必要があります。 MVCではまずURLに該当するページそのものがあるかどうかを調べます。 実際にルートとなるフォルダの下にHomeフォルダがあり、そこにindex.aspxというファイルがあればそのファイルが実行されます。 デフォルトのホームページはここにはなく、Views/Home/index.aspx に作っているでしょうから、このファイルは見つかりません。 で、次にどうするかというと、URLに該当するコントロールのメソッドがないかが調べられるわけです。 index.aspxなんてメソッドは作成していないでしょうから、そんなリソースはない、という結果が返ってきます。 ちなみに、コントロールのメソッド内でViewを読ぶときに拡張子を付けてない、と思われるでしょうが、 この場合は.aspxとかを自動的につけてViewフォルダの下を探しにいきます。 こんな仕組みが用意されています。 MVCの場合はURLからファイルを探すのではなく該当するコントロールのメソッドを呼び出すのがメインの処理となる、という部分が理解できれば上記の動きが腑に落ちるかと思います。 ちなみにルーティングの説明は以下にあります。 http://msdn.microsoft.com/ja-jp/library/cc668201.aspx
お礼
ご教示いただいたサイト、書籍その他を勉強して以下のようなことが分かりました。 ・ViewとControl (1)MVCではContorllerのAction毎にViewが存在する。 (2)(1)のViewは Views/Controller名/Actrion名.aspx Views/Controller名/Actrion名.apcx Views/Shared/Actrion名.aspx Views/Shared/Actrion名.ascx の順番でみにいく。 (3)(2)のデフォルト動作はGlobal.asax.cs内のroute.MapRoute()あたりで定義されている。 (4)aspxファイルは(1)(2)(3)の一連の流れにあるスクリプトファイルであり、従来型asp.netのaspxファイルみたくviewやcontrollerを兼ね備えた絶対的存在ではない。ViewエンジンもRazorその他に変更できる。 (5)上記(1)から(4)より、 従来型asp.net→aspxファイルにかなり依存して動作 ASP.net MVC→ControllerとView(とModel)が協調してフォルダ単位で動作 ・Model ある程度、手作業的にデータベースと紐付けする必要がある。 書籍では「ASP.NET MVC 実践プログラミング」の「第二章 ASP.NET MVCの基本」、「第三章モデル開発の基礎とScaffolding機能」、「第七章 ルーティング」が参考になりました。