2013-03-25 21 views
13

Alan klasörler gibi görünür:Mvc alan yönlendirmesi?

Controller 
    UserController 
     GetAllUsers 

alan rota kaydı

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "Admin_default", 
     "Admin/{controller}/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional }, 
     new { controller = "Branch|AdminHome|User" } 
    ); 
} 

proje rota kaydı

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 }, 
     namespaces: new string[] { "MyApp.Areas.Admin.Controllers" }); 
} 
:

Areas 
    Admin 
     Controllers 
      UserController 
      BranchController 
      AdminHomeController 

Proje dizinleri gibi bakmak

Böyle yoldayken: http://mydomain.com/User/GetAllUsers Kaynak bulunamadı hatası (404) alıyorum. Alanına UserController ekledikten sonra bu hatayı alıyorum.

Bu hatayı nasıl düzeltebilirim? Eğer kontrolör ad alanlarını mahvettigini

cevap

26

teşekkürler ....

Sizin ana güzergah tanımı olmalıdır:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    namespaces: new string[] { "MyApp.Controllers" } 
); 

Ve Yönetici alanı rota kaydı olmalıdır: Doğru ad nasıl kullanılması gerektiğini

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "Admin_default", 
     "Admin/{controller}/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional }, 
     new { controller = "Branch|AdminHome|User" }, 
     new[] { "MyApp.Areas.Admin.Controllers" } 
    ); 
} 

dikkat edin.

+0

Alanlara karşılık gelen ad alanlarıyla karıştırıldım. Bu örnekte, MyApp.Areas.Admin.Controllers ad alanı klasör hiyerarşisiyle eşleşir, ancak ad alanı tanımı keyfi haktır? Programcı, istedikleri kontrolör sınıfına herhangi bir isim alanı atayabilir - diye düşündüm. Ya da klasör hiyerarşisine uyması için ad alanı gerektiren bazı asp.net mvc sözleşmesi var mı? – Howiecamp

+1

@Howiecamp Visual Studio'nun varsayılan davranışı, ad alanını klasör hiyerarşisiyle eşleştirmektir; bu, genellikle tüm projelerde göreceğiniz şeydir (yalnızca MVC projeleri değil). –