13

Próbuję ustawić domyślny adres URL mojej aplikacji MVC na widok w obszarze mojej aplikacji. Obszar ten nosi nazwę "Common", kontroler "Home" oraz widok "Index".Domyślny URL ASP.NET MVC Wyświetl

Próbowałem ustawić defaultUrl w sekcji formularzy web.config na "~/Common/Home/Index" bez powodzenia.

Próbowałem zostały również mapowanie nową trasę w global.asax, a więc:

routes.MapRoute(
     "Area", 
     "{area}/{controller}/{action}/{id}", 
     new { area = "Common", controller = "Home", action = "Index", id = "" } 
    ); 

znów bezskutecznie.

+1

Na dalszych badań, wydaje się, że wniosek jest kierowany do właściwego kontrolera (np. MyApp.Areas.Common.Controllers.HomeController) z sugerowaną zmianą lub bez niej. Jednak w obu przypadkach ViewEngine szuka tylko folderów ~/Views/Home i ~/Views/Shared zamiast zaczynając od ~/Areas/Common/Views/Home i ~/Areas/Common/Views/Shared. O dziwo, jeśli utworzę stronę z ActionLinkiem do tej samej metody kontrolera (tj. Index()), to działa poprawnie. Hmmm. –

+0

http://stackoverflow.com/questions/2140208/how-to-set-a-default-route-to-an-area-in-mvc Może to pomóc. Miałem podobny problem. – LiamB

Odpowiedz

12

trasę, którą wymieniono działa tylko wtedy, gdy wyraźnie wpisać się URL:

yoursite.com/{area}/{controller}/{action}/{id} 

Co to trasa mówi się:

Jeśli dostanę wniosek, że posiada ważną {area}, ważny {controller} w ten obszar i ważny {action} w tym kontrolerze, a następnie poprowadź go tam.

Co chcesz jest domyślnie do tego kontrolera, czy po prostu odwiedzić witrynę, yoursite.com:

routes.MapRoute(
    "Area", 
    "", 
    new { area = "Common", controller = "Home", action = "Index" } 
); 

Co to mówi, że jeśli nie dołączy coś do http://yoursite.com następnie poprowadzić go do następujących akcja: Common/Home/Index

Umieść ją również na górze tabeli tras.

Sprawia się, że jesteś również pozwalając MVC wiedzieć, aby zarejestrować obszary masz w aplikacji:

umieścić następujące informacje w swojej metodzie Application_Start w pliku Global.asax.cs:

AreaRegistration.RegisterAllAreas(); 
+1

Dla mnie jest to wyszukiwanie w pliku głównym, a nie w obszarze. – FrenkyB

0

Co jesteś robienie wydaje się poprawne. Gdybym miał zgadywać, powiedziałbym, że dzieje się tak ze względu na sposób, w jaki prowadzisz swoją stronę. W Visual Studio, jeśli masz określony widok wybrany po naciśnięciu F5, widok będzie początkowym adresem URL - spróbuj wybrać projekt, a następnie naciśnij F5?

+0

Obawiam się, że to nie jest przyczyną problemu. Dzięki za Twoją sugestię. –

+0

Warto było spróbować: D –

7

Co trzeba zrobić, to:

  • Usuń domyślną trasę z Global.asax.cs

    //// default route map will be create under area 
    //routes.MapRoute(
    // name: "Default", 
    // url: "{controller}/{action}/{id}", 
    // defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    //); 
    
  • SecurityAreaRegistration.cs Update w obszarze Wspólnej

  • Dodaj następujący trasy mapowanie:

    context.MapRoute(
        "Default", 
        "", 
        new { controller = "Home", action = "Index", id = "" } 
    ); 
    
0

Usuń z pliku Global.asax .MapRoute

i sprawiają, że wygląda jak

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

następnie pod yourareaAreaRegistration.cs okolicznych (jest tam, jeśli dodany obszar poprzez VS)

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    //This is the key one   
    context.MapRoute("Root", "", new { controller = "Home", action = "Login" }); 

    //Add more MapRoutes if needed 
}