RedirectToAction с параметром - PullRequest
520 голосов
/ 11 августа 2009

У меня есть действие, которое я вызываю с привязки таким образом, Site/Controller/Action/ID, где ID - это int.

Позже мне нужно перенаправить на это же действие с контроллера.

Есть ли умный способ сделать это? В настоящее время я храню ID в tempdata, но когда вы нажмите f5, чтобы обновить страницу после возвращения, временные данные исчезли, и страница вылетает.

Ответы [ 14 ]

7 голосов
/ 31 августа 2011

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

например.

Global.asax

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

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            //new { controller = "Home", action = "Index", id = UrlParameter.Optional 
            new { controller = "Home", action = "Index", id = UrlParameter.Optional,
                  extraParam = UrlParameter.Optional // extra parameter you might need
        });
    }

тогда параметры, которые вам нужно будет передать, изменится на:

return RedirectToAction( "Main", new RouteValueDictionary( 
    new { controller = controllerName, action = "Main", Id = Id, extraParam = someVariable } ) );
6 голосов
/ 01 августа 2015

Если вам нужно перенаправить на действие вне контроллера, это будет работать.

return RedirectToAction("ACTION", "CONTROLLER", new { id = 99 });
3 голосов
/ 10 декабря 2018
RedirectToAction("Action", "Controller" ,new { id });

работал для меня, не нужно было делать new{id = id}

Я перенаправил на тот же контроллер, поэтому мне не нужно было "Controller", но я не уверен в конкретной логике, когда контроллер требуется в качестве параметра.

1 голос
/ 11 июля 2018

Следующее успешно с ядром asp.net 2.1. Это может применяться в другом месте. Словарь ControllerBase.ControllerContext.RouteData.Values ​​напрямую доступен и доступен для записи из метода действия. Возможно, это конечный пункт назначения данных в других решениях. Он также показывает, откуда берутся данные маршрутизации по умолчанию.

[Route("/to/{email?}")]
public IActionResult ToAction(string email)
{
    return View("To", email);
}
[Route("/from")]
public IActionResult FromAction()
{
    ControllerContext.RouteData.Values.Add("email", "mike@myemail.com");
    return RedirectToAction(nameof(ToAction));
         // will redirect to /to/mike@myemail.com
}
[Route("/FromAnother/{email?}")]`
public IActionResult FromAnotherAction(string email)
{
    return RedirectToAction(nameof(ToAction));
         // will redirect to /to/<whatever the email param says>
         // no need to specify the route part explicitly
}
...