2013-08-19 17 views
7

Bazı alanları içeren bir MVC 4 web uygulamasına sahibim. "Katalog" adlı bir alanın yönlendirme kuralları ile ilgili bir sorunum var.AreaRegistration.RegisterAllAreas(), Bölge Için Kurallar Kayıt Olmuyor

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

ve Global.asax şöyle: RouteConfig.cs dosyasıdır

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

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

Ve CatalogAreaRegistration böyle bir şeydir: i hata ayıklarken

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

sorun, RouteCollection olduğunu rotalar, bölgede tanımlanan kuralları içermez. Routedebugger kullandım ve rota koleksiyonunun "Katalog" alanının kurallarını içermediğini gördüm. RouteConfig'te yalnızca kuralları vardır.

Sorun nedir bilmiyorum. Şimdiden teşekkürler.

+0

Ne eklerseniz 'alanı = "Katalog"' 'RegisterArea' yönteminde' MapRoute' çağrının varsayılan? – asymptoticFault

+0

@asymptoticFault Denedim ama RegisterArea'daki kuraldan beri önemli değil, global rotalarda mevcut değil. – atakanozgun

+0

Başka bir deyişle, RegisterArea yönteminde bir kesme noktası eklerseniz, hiçbir zaman vurmaz. Ancak, AreaRegistration.RegisterAllAreas() global.asax – atakanozgun

cevap

16

Visual Studio'nun önbelleklemesi nedeniyle, bazı dll'lerin düzgün bir şekilde derlenmediğini ve bu durumun meydana gelebileceğini düşünüyorum. Bunu yaparsanız, aşağıdaki konumlardan tüm geçici dosyaları silin:

  • C: \ Temp
  • C: \ Users \% kullanıcı adı% \ AppData \ Local \ Microsoft \ VisualStudio
  • C: \ Windows \ Microsoft \ Framework \ v4.0.30319 Temporary ASP.NET dosyaları
  • C \: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 Temporary \ ASP.NET Files
  • Path \ \ obj \ Kişisel \ Projesi \ To Hata ayıklama

Güncelleştirme :

  • AppData \ Local \ Temp \ Temporary ASP.NET dosyaları

Sonra Visual Studio yeniden başlatın. Bu şekilde çözdüm.

+2

Temizlemek için obj ve bin klasörünü siliyorum ve işe yaradı! –

+0

Bu benim için de çalıştı. Teşekkürler! – avidProgrammer

1

Sadece AreaRegistration için denetleyicilerin ad ekleyin:

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" }** 
     ); 
    }