RedirectToAction с параметром

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

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

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

Ответ 1

Ответ Курта должен быть прав, из моих исследований, но когда я попробовал это, я должен был сделать это, чтобы заставить его фактически работать для меня:

return RedirectToAction( "Main", new RouteValueDictionary( 
    new { controller = controllerName, action = "Main", Id = Id } ) );

Если я не указал контроллер и действие в RouteValueDictionary, это не сработало.

Кроме того, при кодировании, подобном этому, первый параметр (Действие), кажется, игнорируется. Поэтому, если вы просто укажете контроллер в Dict и ожидаете, что первый параметр указывает действие, он тоже не работает.

Если вы придете позже, сначала попробуйте ответить Курт, и если у вас все еще есть проблемы, попробуйте этот.

Ответ 2

Вы можете передать идентификатор как часть параметра routeValues ​​метода RedirectToAction().

return RedirectToAction("Action", new { id = 99 });

Это приведет к перенаправлению на сайт/контроллер/действие/99. Нет необходимости в параметрах temp или каких-либо данных.

Ответ 3

RedirectToAction с параметром:

return RedirectToAction("Action","controller", new {@id=id});

Ответ 4

Пример MVC 4...

Обратите внимание, что вам не всегда нужно передавать параметр с именем ID

var message = model.UserName + " - thanks for taking yourtime to register on our glorious site. ";
return RedirectToAction("ThankYou", "Account", new { whatever = message });

и

public ActionResult ThankYou(string whatever) {
        ViewBag.message = whatever;
        return View();
} 

Конечно, вы можете назначить строки для полей модели вместо использования ViewBag, если это ваши предпочтения.

Ответ 5

//How to use RedirectToAction in MVC

return RedirectToAction("actionName", "ControllerName", routevalue);

пример

return RedirectToAction("Index", "Home", new { id = 2});

Ответ 6

Также стоит отметить, что вы можете передать более одного параметра. id будет использоваться для составления части URL-адреса, а любые другие будут переданы как параметры после? в url и будет UrlEncoded по умолчанию.

например.

return RedirectToAction("ACTION", "CONTROLLER", new {
           id = 99, otherParam = "Something", anotherParam = "OtherStuff" 
       });

Таким образом, URL-адрес будет выглядеть следующим образом:

    /CONTROLLER/ACTION/99?otherParam=Something&anotherParam=OtherStuff

После этого на ваш контроллер можно ссылаться:

public ActionResult ACTION(string id, string otherParam, string anotherParam) {
   // Your code
          }

Ответ 8

....

int parameter = Convert.ToInt32(Session["Id"].ToString());

....

return RedirectToAction("ActionName", new { Id = parameter });

Ответ 9

У меня тоже была эта проблема, и неплохой способ сделать это, если вы находитесь в одном контроллере, - это использовать именованные параметры:

return RedirectToAction(actionName: "Action", routeValues: new { id = 99 });

Ответ 10

Если вы хотите показать сообщение об ошибке для [httppost], то он может попытаться передать идентификатор, используя

return RedirectToAction("LogIn", "Security", new { @errorId = 1 });

для получения подробной информации

 public ActionResult LogIn(int? errorId)
        {
            if (errorId > 0)
            {
                ViewBag.Error = "UserName Or Password Invalid !";
            }
            return View();
        }

[Httppost]
public ActionResult LogIn(FormCollection form)
        {
            string user= form["UserId"];
            string password = form["Password"];
            if (user == "admin" && password == "123")
            {
               return RedirectToAction("Index", "Admin");
            }
            else
            {
                return RedirectToAction("LogIn", "Security", new { @errorId = 1 });
            }
}

Надеюсь, он отлично работает.

Ответ 11

Это может быть много лет назад, но в любом случае это также зависит от вашего маршрута карты 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 } ) );

Ответ 12

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

return RedirectToAction("ACTION", "CONTROLLER", new { id = 99 });