9

いくつかの領域で構成される MVC 4 Web アプリケーションがあります。「Catalog」という名前のエリアのルーティング ルールに問題があります。RouteConfig.cs ファイルは次のとおりです。

    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 },
        );
    }

および Global.asax は次のようになります。

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

CatalogAreaRegistration は次のようなものです。

public class CatalogAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Catalog";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Catalog_default",
            "Catalog/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );
    }
}

問題は、デバッグ時に RouteCollection ルートに、その領域で定義されたルールが含まれていないことです。routedebugger を使用したところ、ルート コレクションが「カタログ」領域のルールで構成されていないことがわかりました。RouteConfig にはルールしかありません。

何が問題なのかわかりません。前もって感謝します。

4

2 に答える 2

20

Visual Studio のキャッシュが原因で、一部の dll が正しくコンパイルされず、この状況が発生する可能性があると思います。その場合は、次の場所からすべての一時ファイルを削除します。

  • C:\Temp
  • C:\Users\%Username%\AppData\Local\Microsoft\VisualStudio
  • C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET ファイル
  • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET ファイル
  • Path\To\Your\Project\obj\Debug

アップデート :

  • AppData\Local\Temp\Temporary ASP.NET ファイル

次に、Visual Studio を再起動します。これが私が解決した方法です。

于 2013-08-20T17:07:33.027 に答える
1

コントローラーの名前空間を AreaRegistration に追加するだけです。

public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            **namespaces: new string[] { "Web.Admin.Controllers" }**
        );
    }
于 2014-04-19T20:23:13.823 に答える