ASP.Net MVCのプロジェクト構造を理解する

MVCのプロジェクト構造

  • ASP.Net MVCのプロジェクト構造はModelはModelsフォルダ、ControllerはControllersフォルダ、ViewはViewsフォルダにある
  • F5を押してデバッグを開始してみる
  • /Home/Indexにアクセスする
  • ここでControllers/HomeController.csを見てみる
  • HomeControllerクラスにIndexというメソッドがあることがわかる
  • public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    
        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";
    
            return View();
        }
    
        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";
    
            return View();
        }
    }
    

     

  • Viewsフォルダを見てみるとHomeフォルダ内にIndex.cshtmlがあることがわかる
  • まとめると、ASP.Net MVCのファイルやフォルダの名前の対応付けはこのようになっている
    1. ブラウザで/Home/Indexにアクセスする
    2. HomeControllerのIndexメソッドに処理が渡る
    3. IndexメソッドがView()メソッドをreturnしているためViews/Home/Index.cshtmlがブラウザに描画される
  • 試しに/Account/LoginにアクセスするとちゃんとViews/Account/Login.cshtmlにアクセスすることができる

ルーティング設定

  • ではどこで /コントローラ名/メソッド名 のようなURL対応付けが行われているのかというと/App_Start/RouteConfig.cs
  • RegisterRouteメソッドを見てみるとそれっぽい表記がある
  • public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
    

     

  • MapRouteメソッドの第二引数に「{controller}/{action}/{id}」と指定されているからブラウザに打ち込んだURLとコントローラ、ビューが対応付けられている
  • 第三引数に
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
  • とあるがこれでブラウザでルートパスにアクセスした場合/Home/Indexにアクセスすることとなる。id=UrlParameter.Optionalと指定することでidはオプションとなる

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.