MVC2 What's new part 3.

Areas czyli obszary
Areas pozwalają na rozbicie aplikacji na obszary. Każdy z obszarów będzie miał swój zestaw kontrolerów, widoków i routing. Wszystkie obszary mogą nadal korzystać z katalogu Shared, nadal możemy mieć główny obszar (ten który był dostępny do tej pory).
Dodanie obszaru jest proste: Utworzony zostanie katalog Areas a w nim nasz nowy obszar oraz nowy zestaw katalogów ze strukturą MVC. Została również utworzona klasa typu AreaRegistration. Region zostanie automatycznie zarejestrowany dzięki AreaRegistration.RegisterAllAreas(); który jest wywoływany na Application_Start()
public class SomeNewAreaAreaRegistration : AreaRegistration
{
   /// unikalna nazwa obszaru, wykorzystywana do nawigacji
    public override string AreaName
    {
        get
        {
            return "SomeNewArea";
        }
    }

    /// rejestrujemy routing dla danego obszaru
    /// nie ma domyślnego kontrolera, jednak możemy go bez problemu dodać
    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "SomeNewArea_default",
            "SomeNewArea/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
            ,new string[]{"Controllers.SomeNewArea"}
        );
    }
}
W obszarach mogą powtarzać się nazwy kontrolerów, jednak jeśli w tej chwili dodamy sobie do obszaru SomeNewArea kontroler Home dostaniemy błąd ponieważ defaultowy routing nie będzie wiedział gdzie szukać. Musimy mu więc powiedzieć W moim przypadku namespace gdzie znajduje się domyślny kontroler Home to Controllers. Moim zdaniem wydzielenie kontrolerów do osobnej dll zwiększa przejrzystość kodu, a z obszarami jeszcze bardziej.
 public static void RegisterRoutes(RouteCollection routes)
{
   routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

   routes.MapRoute(
     "Default", // Route name
     "{controller}/{action}/{id}", // URL with parameters
     new { controller = "Home", action = "Index", id = UrlParameter.Optional}
     , new string[]{"Controllers"}
     );
}
Teraz możemy dostać się wszędzie wpisując adres, jednak jeśli przejdziemy do obszaru SomeNewArea przestanie działać menu - a to dlatego że obecny zapis menu wskazuje na linki w tym tym samym obszarze a nie obszarze głównym tak jakbyśmy się tego spodziewali.
 
Musimy dołączyć informacje o obszarze. Jeśli chcemy się dostać do 'głównego' obszaru nazwę pozostawiamy pustą.
            

Komentarze

Popularne posty