2013-12-15 3 views
0

Мне нужно перенаправить запрос на другой контроллер. Так что в основном у меня есть www.MyDomain.com/SomeParameter. Мне нужно прочитать это значение параметра из URL-адреса, а затем перенаправить на другой контроллер для дальнейшей обработки. Для этого у меня есть два контроллера в моем проекте Home and Employee следующим образом.Перенаправление на другой метод контроллера

public class HomeController : Controller 
    { 
     public ActionResult Index(string ID) 
     { 
      if (!string.IsNullOrEmpty(ID)) 
      { 
       string EmployeeAccountNumber = GetEmployeeNumberFromID(ID); 
       RedirectToAction("Employee", "Index", EmployeeAccountNumber); 
      } 

      return View(); 
     } 

     private string GetEmployeeNumberFromID(string ID) 
     { 
      return "Alpha"; 
     } 
    } 

public class EmployeeController : Controller 
    { 
     // 
     // GET: /Employee/ 

     public ActionResult Index(string id) 
     { 
      return View(); 
     } 

    } 

Затем я добавил маршрутизации определяется следующим образом в Global.asax

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

      routes.MapRoute(
       "Default", // Route name 
       "{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
       ); 

      routes.MapRoute(
       "EmployeeManagement", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Employee", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
       ); 
     } 

Как вы можете видеть в методе индекс класса HomeController, я хочу, чтобы перенаправить на мой EmployeeController, однако, точка останова Я установлен в EmployeeController.Index никогда не попадает. Я здесь что-то не так?

ответ

1
public class HomeController : Controller 
     { 
     public ActionResult Index(int id) 
     { 
// Redirect/Index/id is because of route defined as {controller}/{action}/{id} 
//if u need the url to be say "www.MyDomain.com/3240" then change route definition as 
//"{id}" instead of "{controller}/{action}/{id}". Tested and working 
      return RedirectToAction("Index", "Redirect/Index/" + id); 
     } 
} 

public class RedirectController : Controller 
    { 
     // 
     // GET: /Redirect/ 

     public ActionResult Index(int id) 
     { 
      return View(); 
     } 

    } 

routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
      ); 

      routes.MapRoute(
       "redirectedroute", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "RedirectController", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
      ); 
+0

Я не уверен, что этот код касается конкретного сценария, с которым я сталкиваюсь. Я добавил более подробные сведения в свой вопрос, чтобы уточнить его –

0

Вместо RedirectToAction() пытаются Redirect ("/ Employee") и пусть контроллер Handle Rest

+0

не делает никакой разницы. –

+0

public ActionResult Index() { return RedirectToAction ("Index", "RedirectToAction"); } - проверенный фрагмент. «Перенаправление» - это моя часть url для маршрутизации. – harshal

+0

так что перенаправление - это ваш контроллер здесь? Можете ли вы добавить свой код в свой ответ, потому что комментарии не соответствуют коду (как вы можете видеть в том, что вы добавили выше) –

1

Использование

return RedirectToAction("Employee", "Index", new {"id"=EmployeeAccountNumber}); 

вместо

RedirectToAction("Employee", "Index", EmployeeAccountNumber); 

Вы не проходя маршрут параметры

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