RedirectToAction и RedirectToRoute - PullRequest
       11

RedirectToAction и RedirectToRoute

21 голосов
/ 20 января 2012

В моем контроллере веб-страницы 1 я хочу перенаправить на веб-страницу 2, передавая 2 переменные.

Я пытался использовать RedirectToRoute, но не могу заставить его работать; неверный URL отображается. Затем я переключился на использование RedirectToAction.

мой код:

Маршрутизация

routes.MapRoute(
    "CreateAdditionalPreviousNames", // Route name
    "Users/{controller}/{action}/{userId}/{applicantId}", // URL with parameters
    new { controller = "UsersAdditionalPreviousNames", action = "Index", userId = UrlParameter.Optional, applicantId = UrlParameter.Optional } // Parameter defaults
);

RedirectToAction (работает)

return RedirectToAction("Index", "UsersAdditionalPreviousNames", new { userId = user.Id, applicantId = applicant.Id });

RedirectToRoute (не работает)

return RedirectToRoute("CreateAdditionalPreviousNames", new { userId = user.Id, applicantId = applicant.Id });

О, и еще одна вещь, вы можете сделать параметры обязательными, а не необязательными ... если так, как?

1 Ответ

23 голосов
/ 20 января 2012

Параметр Omit по умолчанию делает параметры обязательными:

    routes.MapRoute(
    "CreateAdditionalPreviousNames", // Route name
    "Users/{controller}/{action}/{userId}/{applicantId}", // URL with parameters
    new { controller = "UsersAdditionalPreviousNames", action = "Index" }
);

Для перенаправления маршрута попробуйте это:

return RedirectToRoute(new 
{ 
    controller = "UsersAdditionalPreviousNames", 
    action = "Index", 
    userId = user.Id, 
    applicantId = applicant.Id 
});

Еще одна привычка, которую я приобрел у Стива Сандерсона, - не называть ваши маршруты. Каждый маршрут может иметь нулевое имя, что позволяет явно указать все параметры:

    routes.MapRoute(
    null, // Route name
    "Users/{controller}/{action}/{userId}/{applicantId}", // URL with parameters
    new { controller = "UsersAdditionalPreviousNames", action = "Index" }
);
...