2013-08-19 27 views
7

私はいくつかの領域で構成されるMVC 4 Webアプリケーションを持っています。私は "カタログ"という名前のエリアのルーティングルールに問題があります。AreaRegistration.RegisterAllAreas()は領域の規則を登録していません

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のは、次のように:RouteConfig.csファイルがある

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を使って、ルートコレクションが "Catalog"エリアのルールではないことを見た。 RouteConfigにはルールしかありません。

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

+0

あなたが追加した場合、 '面積=「カタログ」' 'RegisterArea'方法で' MapRoute'コールのデフォルトに? – asymptoticFault

+0

@asymptoticFault私は試しましたが、RegisterAreaのルールはグローバルルートに存在しないので問題はありません。 – atakanozgun

+0

つまり、RegisterAreaメソッドでブレークポイントを追加すると、決してヒットしません。しかし、AreaRegistration.RegisterAllAreas()はglobal.asax – atakanozgun

答えて

16

私はVisual Studioのキャッシングのために、dllの一部が適切にコンパイルされていないと考えられます。この状況が発生する可能性があります。そうした場合、次の場所からすべての一時ファイルを削除します。

  • C:\ Tempに
  • C:\ Users \ユーザー%のユーザー名%\のAppData \ローカル\マイクロソフト\ VisualStudioを
  • C:\ WINDOWS \マイクロソフト.NET \ Frameworkの\ v4.0.30319 \ ASP.NETの一時ファイル
  • C:\あなたの\プロジェクトを\するには、Windows \ Microsoft.NET \ Framework64 \ v4.0.30319
  • ASP.NETの一時ファイル\パス\ \ OBJ \デバッグ

更新:

  • のAppData \ローカル\ Tempに\ ASP.NETの一時ファイル

は、その後のVisual Studioを再起動します。これが私が解決した方法です。

+2

私はobjとbinフォルダをクリーンアップにデリートしてくれました!それは働いていました! –

+0

これはまた私のために働いています。ありがとうございました!あなたのAreaRegistrationクラスが 'public'であることを確かめてください。 – avidProgrammer

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" }** 
     ); 
    } 
関連する問題