tirsdag den 3. juli 2012

ASP.NET MVC med mange routes



Hvis man ønsker at have forskellige routes til forskellige formål så kan det give nogle udfordringer som jeg i dag har været lidt igennem og ville notere til mig selv fremover og dele med andre der står i samme situation.

Man skal starte med laveste fællesnævner (altså den korteste URL og route), men det som er specielt er at nogle gange er det ikke denne man ønsker at starte med (hvilket MVC gør - fordi den når til den første og prøver den af og hvis den fungerer så leverer den resultatet videre.

Min situation var at jeg havde en Controller kaldet "Summerhouse", som ikke tager nogen action, men "blot" et tal for hvor mange der skulle vises.
Den bliver defineret således inde i Global.asax:
routes.MapRoute("Summerhouse",
                            "{controller}/{numberToShow}",
                            new { controller = "Summerhouse", action = "Index", numberToShow = UrlParameter.Optional }
);

Denne skal placeres over ens "default"-route som ser således ud:
routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

Problemet med dette er at nu vises "Summerhouse" som standart når ens side loades, og det er ikke lige sikkert man har det ønske men rent faktisk gerne vil vise "Home" fra standart.

Dette kan løses således:
routes.MapRoute(
                "Start", // Route name
                "{controller}", // URL with parameters
                new { controller = "Home", action = "Index"} // Parameter defaults
);

Denne er kortere og defineret før som gør at denne vil fange din start-side og vise den, men mere avancerede som URL's "/Home/About/" vil stadig blive fanget inde i den nedeste definerede "Default".

Ingen kommentarer:

Send en kommentar

Kan du lide mit indlæg, har en kommentar, forslag eller andet på hjerte så skriv venligst