2013-06-18 21 views
18

Benim bölgem aşağıda. Sadece ilgili kısım vurgulanır.Denetleyici

enter image description here

Yol Tablo

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

    routes.MapRoute(
     "SubFolder", // Route name 
     "SubFolder/ChildController", 
     new { controller = "ChildController", action = "Index" }, 
     new[] { "Practise.Areas.SOProblems.Controllers.SubFolder" }); 


    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}", // URL with parameters 
     new { controller = "Home", action = "Index" } // Parameter defaults 
    ); 
} 

This only works when the url is like this 
localhost:2474/SOProblems/ChildController/index 

This does not works when the url is like this 
localhost:2474/SOProblems/SubFolder/ChildController/index 

eksik ne olduğunu söyleyebilir?

+0

"Çalışmıyor" tam olarak ne anlama geliyor? – TGlatzer

+0

@ Grumbler85 - son denenen URL 404, –

+0

veriyor. Backtick burada "SubFolder'/ChildController" var mı? Alt klasörün içindeki ad alanının doğru ayarlandığını kontrol edin. – TGlatzer

cevap

14

Bu işler olmaz bu localhost:/ChildController/index normaldir

2474/SOProblems/AltKlasör. Siz rota modeli şu şekilde görünür: SubFolder/ChildController ve SubFolder/ChildController/index. Buna ek olarak, rotanızı WRONG yerinde tanımladınız. Bunu ana rota tanımlarınızda tanımladınız ve bölgenizdeki rota tanımlarında değil. Yani ana rotalardan özel yolu tanımı kurtulmak ve (sizin SOProblems yolları kayıtlı olması gereken yerde olan) SOProblemsAreaRegistration.cs dosyaya ekleyin: Ayrıca

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "SubFolderRoute", 
     "SOProblems/SubFolder/ChildController", 
     new { controller = "ChildController", action = "Index" }, 
     new[] { "Practise.Areas.SOProblems.Controllers.SubFolder" } 
    ); 

    context.MapRoute(
     "SOProblems_default", 
     "SOProblems/{controller}/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional } 
    ); 
} 

rota desen beri (SOProblems/SubFolder/ChildController) yok Bir eylem adı belirleme olasılığı, bu denetleyicide yalnızca bir eyleminiz olabilir ve bu, bu durumda (index) kaydettiğiniz varsayılan eylem olacaktır. ana güzergah tanımı varsayılan değerlerine sahip kalabileceklerini Her iki durumda da

context.MapRoute(
    "SubFolder", 
    "SOProblems/SubFolder/ChildController/{action}", 
    new { controller = "ChildController", action = "Index" }, 
    new[] { "Practise.Areas.SOProblems.Controllers.SubFolder" } 
); 

: Bu denetleyici üzerinde daha fazla işlem var ve henüz endeks varsayılan kullanırken rota desende o içermelidir biri olmak istiyorsa

:

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

    routes.MapRoute(
     "Default", 
     "{controller}/{action}", 
     new { controller = "Home", action = "Index" } 
    ); 
} 
+2

"RegisterArea" nereden geliyor? Tüm çözümü sıfır sonuçla araştırdım. – usefulBee

+0

@usefulBee "RegisterArea", Visual Studio scaffold'ları yeni bir _Add> Area ..._ – Jasen

5

Yeni rotanız "SubFolder" rotanızda bir eylem ekleme olasılığını içermez (sizin durumunuzda, "Index").

Sizin örnek URL

localhost:2474/SOProblems/SubFolder/ChildController/index 

gibi bir rota maç denemek istiyor:

"SubFolder/ChildController/{action}" 

Ama bu kazandı böylece, rotanız içinde "{eylemi}" içermez Rotanızı eşleştirin. Daha sonra, kesin olarak başarısız olan varsayılan yolu dener. Rotanıza "{eylemi}" ekleyerek

Dene:

routes.MapRoute(
    "SubFolder", // Route name 
    "SubFolder/ChildController/{action}", 
    new { controller = "ChildController", action = "Index" }, 
    new[] { "Practise.Areas.SOProblems.Controllers.SubFolder" }); 

veya almak "index" Test URL'ye kapatır. url gibi olduğunda

+2

Bu çalışmıyor. –