Hi guys,
I am currently creating a mobile version of my company's site and using it as a time to learn asp.net mvc.
The URLs which I'm meant to be creating are as follows
Jobs/in/location
Jobs/for/jobTitle
Jobs/in/location/for/jobtitle
jobs/for/jobtitle/in/location
Now the more types we add the more I'll need to add and different routes I'll need, so not really maintaining.
So currently in my Global.asax.cs is
//Jobs
routes.MapRoute(
"DefaultJobs", // Route name
"Jobs/{pagenumber}", // URL with parameters
new { controller = "Jobs", action = "Default", pagenumber = "1" } // Parameter defaults
);
//Jobs by Location
routes.MapRoute(
"JobsByLocation", // Route name
"Jobs/in/{location}/{pagenumber}", // URL with parameters
new { controller = "Jobs", action = "Default", location = "", pagenumber = "1" } // Parameter defaults
);
//Jobs by Title
routes.MapRoute(
"JobsByTitle", // Route name
"Jobs/for/{title}/{pagenumber}", // URL with parameters
new { controller = "Jobs", action = "Default", title= "", pagenumber = "1" } // Parameter defaults
);
//Jobs by Title and Location
routes.MapRoute(
"JobsByTitleAndLocation", // Route name
"Jobs/for/{title}/in/{location}/{pagenumber}", // URL with parameters
new { controller = "Jobs", action = "Default", location = "", title = "", pagenumber = "1" } // Parameter defaults
);
So I'm not sure if this is right, since in my JobsController I did have "in" as a Controller, but I could only get one parameter. So I went with a default one which caught everything.
public ActionResult Default(string location, string title, string pagenumber)
{
return Content("Location " + location + " Title " + title + " Page " + pagenumber);
}
Now is this the right way of doing it? Or have I missed something?
For calling this method, I have this
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SearchContinent(string Continents)
{
try
{
// TODO: Add update logic here
//return RedirectToAction("Default","Jobs",
//new {
// location = Continents
// });
return RedirectToRoute(new { controller = "Jobs", action = "Default", location = Continents, pagenumber = "1" });
//return Redirect("Jobs/in/" + Continents);
}
catch
{
return View();
}
}
Now this doesn't produce the correct url since it is missing the "in" and passes "location" as a param, which works but is incorrect.