• ベストアンサー

ASP.NET MVCのホームページ表示について

ASP.NET MVC2 Webアプリケーションを新規作成した場合 http://localhost:○○/Home/index だと、デフォルトのホームページ「マイ MVC アプリケーション」が表示されますが、 http://localhost:○○/Home/index.aspx とaspx拡張子をつけると「リソースが見つかりませんでした。」といわれます。 従来型のASP.NET Webアプリケーションに慣れている者としては上記挙動が理解できません。 「逆では?」と感じられます。 なぜ上記のような結果になるのでしょうか? ご案内の方がおられましたらよろしくご教示くださいませ。

質問者が選んだベストアンサー

  • ベストアンサー
  • onos
  • ベストアンサー率81% (127/155)
回答No.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

creamysoft
質問者

お礼

ご教示いただいたサイト、書籍その他を勉強して以下のようなことが分かりました。 ・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機能」、「第七章 ルーティング」が参考になりました。

関連するQ&A

  • ログインが必要 Asp.net MVC2

    Asp.net MVC 2の勉強をしています。 一番最初のASP.NET MVC2 Web アプリケーションのプロジェクトを作りました。 デバッグは全然問題ないですが、発行後画面を開こうとすると、下記のエラーが出ました。  HTTP403  Web サイトによってこのページの表示を拒否されました   •この Web サイトを表示するにはログインが必要です。 IISのバージョンは5.1 解決方法お願いします。

  • ASP.NET 3.5 アプリのフォルダ構成

    ASP.NET 3.5 アプリを作成する上で、おすすめなフォルダ構成はありますか? 漠然とした質問のため、漠然とした回答で構いません。 例えば │ web.config │ ├─App_Data ├─src │ Default.aspx.cs ・・・csファイルを配置 │ └─test1 └─testa Default.aspx ・・・aspxファイルを配置 なお、フレームワークとMVCは使用しません。

  • PHPでMVC

    現在WEB関連のプログラムの仕事をしています。 主に、ASP.NET+C#を利用しています。 以前にJavaやPerlを使ったことはあるのですが、 PHPを使った事がありません。そこで今後利用できないか一度評価しておこうと思っています。 PHPは最近主流のMVCには対応していないと思うのですが、MVCで開発できる拡張キットやテクニックのようなものはありませんか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • Asp.netで開発しています。

    Asp.netで開発しています。 vs2005で作成したASPのモジュールをIISに移行したいのですがIIS上だとエラーがでます。 /////////////////////////////////////////////////////////////////// パーサー エラー 説明: この要求の処理に必要なリソースの解析中にエラーが発生しました。 以下の解析エラーの詳細を確認し、ソースファイルに変更を加えてください。 パーサー エラー メッセージ: 型 'test._Default' を読み込めませんでした。 ソース エラー: 行 1: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="test._Default" %> ///////////////////////////////////////////////////////////////// 拡張子.aspは簡単なサンプルを起動できるのですが、.aspxだとどれもエラーがでます。 マッピングのための処理はしたのですが・・・解決をして下さい。お願いします。

  • 【ASP.NET MVC】モデルの作り方

    ASP.NET MVCでのモデルについて、皆様はどのように作成しておられますか? ASP.NET MVCで何本かWebシステムを構築して、いまだに試行錯誤です。 サンプル例を見ても、実際とはかけ離れた簡単な内容で、あまり参考になりません。 自分が見たいくつかのサイトではこのように書いてありました。 ドメインモデル データベースと1:1で存在する入出力用のモデル。EntityFrameworkで定義する。 拡張ドメインモデル ドメインモデルにプロパティを追加したり、複数のモデルを使いやすくまとめたモデル。 ビューモデル 画面表示するためのモデル。 フォームモデル フォーム入力値を受信するためのモデル。 理屈はわかるのですが、このように4種類もモデルを定義するものなのでしょうか? モデル間のデータのやりとりも大変ですし、定義だけで作業量が半端ない感じです。 継承などをうまく使って省力化する方法とかありますか? 皆さまの方法論をお聞きしたくお願い申し上げます。 ASP.NET MVCに限らず、CakePHPなどの例でも歓迎です。

  • ASP.NET MVC 最初からあるログイン機能

    こんにちは。 初心者向け書籍でASP.NET MVCの独学を始めたばかりのものです。 現在プログラムを書く用のパソコンと、SQL Serverをインストールしてあるパソコンが別々な環境で学習書籍を進めています。そのなかでWebアプリケーションに最初から備わっているログイン機能(デフォルト状態のView画面右上についている"ログイン"の機能)を使うところがあるのですが、ローカルにSQL Serverをインストールしてある前提なので、私の環境ではエラーになります。 そこで質問なのですが、以下の環境でWebアプリに最初から備わっているログイン機能を使用するにはどうすればよいのかご教示ください。 VS2010を使っているパソコン:192.168.1.1 SQL Server2008が入っているパソコン:192.168.1.2 SQL Serverの認証方法:SQL Server認証(ID:admin Pass:admin) 言語 C# ちなみに、ログイン機能以外のデータベースアクセスは問題なくできています。 補足すべき情報があったらご指摘ください。 よろしくお願いします。

  • ASP.NET Core MVCのルーティング

    ASP.NET Core MVCのルーティングについて質問です。 例えばTESTという画面を作成する際、コントローラーとビューは、 既存のHOMEを参考にし、 ・「Controllers」フォルダ配下に、「TestController.cs」を作成する。 ・「Views」フォルダ配下に、「TEST」というフォルダを作成し、  「Index.cshtml」を作成する。 といういうのが基本だと思います。 ですが上記ではなく、画面ごとにフォルダを作成し、 そのフォルダに「Controllers」フォルダ、「Views」フォルダを作成し、 管理したいと思っています。 あくまで既存のHOMEはそのままにしたいので、 プロジェクト作成後の画面追加分に対してのみフォルダ構成を変えて管理したいです。 ------フォルダ構成イメージ------ Controllers  - HomeController.cs Views  - Home   - Index.cshtml TEST  - Controller   - TestController.cs  - View   - Index.cshtml ------------------------------------------ HomeのIndex.cshtmlから、Testへのページに遷移するためには、 どこでどのようにルーティングを設定すればよろしいのでしょうか?

  • ASP.NET web アプリケーションでの入力検証に関して質問です

    ASP.NET web アプリケーションでの入力検証に関して質問です 当方.NET、オブジェクト指向言語初心者です 検討違いなことを質問しているかもしれませんが 回答いただけたら幸いです 以下を使用しています visual studio 2008 .NET Framework 3.5 C# 新規プロジェクト作成時に ASP.NET web アプリケーションを選択し、 (ASP.NET MVC等ではなく) TextBox Button を配置し Buttonを押下した時に TextBoxに何も入力されていなかった場合 エラーメッセージを表示するような入力検証を System.ComponentModel.DataAnnotations を用いて行いたいと考えています (RequiredFieldValidatorではなく) Q1 新規プロジェクト作成時にASP.NET web アプリケーションを選択した場合 System.ComponentModel.DataAnnotations を用いて入力検証はおこなえるのでしょうか? (webで検索したところASP.NET MVCやSilverlightのサンプルはあったのですが・・・) Q2 Q1がYESの場合 具体的にはどう実装すればよいのでしょうか? 以下にソースを記載します ■Defaoult.Aspx <%@ Page Title="ホーム ページ" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %> <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> </asp:Content> <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator> <br /> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" /> </asp:Content> ■Default.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel.DataAnnotations;  //←※ namespace WebApplication2 { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { } } } ※ 参照の追加で System.ComponentModel.DataAnnotations を追加して usingで定義するところまでは検討がつきました 以上、宜しくお願い致します

  • ASP.net web アプリケーション はじめからつまずいています。

    こんにちは、 ASP.net web アプリケーションの勉強を始めた者です。 ファイル-新規-プロジェクトで「ASP.net web アプリケーション」を選択し、場所をデフォルトのまま(http://localhost/WebApplication1)でOKすると 以下のエラーメッセージが出ます。 要は、自身にWEBサーバを入れていないからということかなと思うのですが、どのように対応すればいいのでしょうか? (.NETでWEBサーバプログラムがあるのですか?またあるのならどうすれば立ち上げることができるのでしょうか?) 初心者の質問でわかりにくいかもしてませんがよろしくお願いします。 環境:windows xp professional visual studio.net 「Web プロジェクト 'WebApplication1' を作成できません。 ポート 80 の 'localhost' に Web サーバーが見つかりませんでした。 Web サーバー名とプロキシの設定が正しいかどうか確認してください。 これらの設定に問題がない場合は、Web サーバーのサービスが一時的に停止している可能性があります。」

  • 【ASP.NET MVC3】コントローラの状態

    いつも大変にお世話になります。 今作っているASP.NET MVC3 Webアプリケーションで、複数のコントローラから呼び出される、共通のクラスとメソッドを作っています。 その中から、コントローラ(具体的にはセッション情報)に値をセットしたいです。 すごく単純化しますと、コントローラがHomeControllerとMemberControllerとして、 public WorkerService {  public SetSessionValue(???){   // 呼び出し元がHomeControllerなら、Session["HomeDt"]に日付をセット   // 呼び出し元がMemberControllerなら、Session["MemberDt"]に日付をセット  } } ていうメソッドを呼び出しています。 英文の記事を見て、ControllerContextという静的クラスを使えばいいのは感覚的にわかったのですが、具体的なコーディングとなるとさっぱりです。 これができると、何かMVCでも光が見えそうな気がします。現在はお先真っ暗ですが。 どなたか教えてやっていただけないでしょうか。お願いします。

専門家に質問してみよう