1

私は現在、 VS2010のブラウンフィールドASP.NET MVC 3プロジェクトに取り組んでいます。

このプロジェクトでは、ビューとコントローラーは別のプロジェクトにあります。これは私が以前に見たものではありません。各アクション メソッドには、以下のようにビュー名の明示的な記述はありません。

return View("viewName",passingModel);//projects where controllers and views are in same 

ビューを右クリックして VS2012 で暗黙的にこれを行いadd viewました。そのため、アクション メソッドの戻りビューとビューの間のこの接続がどこにあるのかについては気にしませんでした。

VS2012 とは異なり、VS2010では、View を右クリックして を実行しても、特定のアクション メソッドに関連するビューに移動できませんgo to view

この小さな実験を行うことで、これを理解しようとしました。を作成しControllerAction Method呼び出しxxxxを作成し、上記のように暗黙的にそのビューを作成し、xxxxソリューション全体で単語を検索しましたが、この単語はコントローラーとビューにのみ表示されました。

そのため、答えを見つけることができませんでした。これを実現するために、ビジュアルスタジオ自体が独自のマッピングを作成していると思います。私のプロジェクトで何が起こっているのかを理解するために、アクションメソッドとビューの間でこれらの暗黙的な接続が誰によって作成されているかを知りたいです。

編集:

コントローラーとビューを含むプロジェクトはどちらもクラス ライブラリです。asp.net mvc プロジェクトではありません。

Global.aspxファイルにはこれが含まれています:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }

        protected void Application_Start()
        {
            DependenciesHelper.Register(new HttpContextWrapper(Context));

            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RoutingHelper.RegisterRoutes(RouteTable.Routes);
        }

        protected void Application_End()
        {
            //Should close the index
            //If this method is not executed, the search engine will still work.
            SearchService.CloseIndex();
        }
4

1 に答える 1

2

マッピングはかなり簡単です。たとえば、「MyBrilliantController」というコントローラーと、それを返す「MyExcellentAction」というアクション メソッドがある場合return View();、(UI プロジェクトで) にマップされます。~/Views/MyBrilliant/MyExcellentAction.cshtml

これが異なるのは、「エリア」を使用している場合のみです。ただし、マッピングは事実上同じであり、最初にエリア フォルダーを考慮するだけです (つまり~/Areas/MyArea/Views/MyBrilliant/MyExcellentAction.cshtml) 。

それが役立つことを願っています。

編集-エンジンがコントローラーを見つけるために、各ルートのglobal.asaxファイルで名前空間を指定することもできます

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { 
                controller = "Home", 
                action = "Index", 
                id = UrlParameter.Optional 
        }, // Parameter defaults
        new string[] {
            // namespaces in which to find controllers for this route
            "MySolution.MyControllersLib1.Helpers", 
            "MySolution.MyControllersLib2.Helpers",
            "MySolution.MyControllersLib3.Helpers" 
        } 
    );

}
于 2013-04-05T09:29:33.080 に答える