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
}
Ответ 7
Если ваш параметр оказывается сложным объектом, это решает проблему. Ключом является конструктор RouteValueDictionary
.
return RedirectToAction("Action", new RouteValueDictionary(Model))
Если у вас есть коллекции, это немного сложнее, но этот ответ отвечает очень хорошо.
Ответ 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 });