プロが教えるわが家の防犯対策術!

ASP.NET MVC2 Webアプリケーションを新規作成した場合
http://localhost:○○/Home/index
だと、デフォルトのホームページ「マイ MVC アプリケーション」が表示されますが、

http://localhost:○○/Home/index.aspx
とaspx拡張子をつけると「リソースが見つかりませんでした。」といわれます。


従来型のASP.NET Webアプリケーションに慣れている者としては上記挙動が理解できません。
「逆では?」と感じられます。

なぜ上記のような結果になるのでしょうか?

ご案内の方がおられましたらよろしくご教示くださいませ。

A 回答 (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 …
    • good
    • 0
この回答へのお礼

ご教示いただいたサイト、書籍その他を勉強して以下のようなことが分かりました。

・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機能」、「第七章 ルーティング」が参考になりました。

お礼日時:2011/03/30 14:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!