2009-02-04 2 views
1

В настоящее время я создаю мобильную версию сайта моей компании и использую ее как время, чтобы узнать asp.net mvc.ASP.net MVC Routes

URL-адреса, которые я предназначены для создания в следующем

Работа/в/место
Работа/для/jobTitle
Работа/в/место/для/jobtitle
работы/для/jobtitle/in/location

Теперь чем больше типов мы добавляем, тем больше мне нужно будет добавлять и разные маршруты, в которых я нуждаюсь, поэтому не поддерживаю.

Так в настоящее время в моем Global.asax.cs является

 

//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 
      ); 
 

Так что я не уверен, если это правильно, так как в моем JobsController я имел «в» в качестве контроллера, но я мог только получить один параметр. Поэтому я пошел с дефолтом, который поймал все.


public ActionResult Default(string location, string title, string pagenumber) 
     { 
      return Content("Location " + location + " Title " + title + " Page " + pagenumber); 
     } 

Теперь это правильный способ сделать это? Или я что-то пропустил?

Для вызова этого метода, я это


[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(); 
      } 
     } 

Теперь это не дает правильный URL, так как он отсутствует в «В» и проходит «местоположение» как пары, который работает, но неправильно ,

ответ

2

С RedirectToRoute вы должны передать название маршрута вы ориентируетесь, так:

return RedirectToRoute("JobsByLocation", new { location = Continents, pagenumber = "1" }); 
+0

Cheers, является остальная часть кода в порядке? – Sarkie

+0

Я бы сменил pagenumber на int и удалил try/catch в SearchContinent - я не уверен, в чем его цель. Но это трудно сказать без остальной части контекста. –

Смежные вопросы