답변:
RedirectToAction () 메소드의 routeValues 매개 변수의 일부로 id를 전달할 수 있습니다.
return RedirectToAction("Action", new { id = 99 });
이로 인해 Site / Controller / Action / 99로 리디렉션됩니다. 임시 또는 모든 종류의 뷰 데이터가 필요하지 않습니다.
Return RedirectToAction("Action", "Controller", New With {.id = 99})
커트의 대답 은 내 연구에서 옳 아야 하지만 시도했을 때 실제로 나를 위해 일하기 위해서는이 작업을 수행해야했습니다.
return RedirectToAction( "Main", new RouteValueDictionary(
new { controller = controllerName, action = "Main", Id = Id } ) );
컨트롤러를 지정하지 않으면 컨트롤러의 동작이 RouteValueDictionary
작동하지 않습니다.
또한 이와 같이 코딩하면 첫 번째 매개 변수 (Action)가 무시되는 것 같습니다. 따라서 Dict에서 컨트롤러를 지정하고 첫 번째 매개 변수가 동작을 지정해야한다면 작동하지 않습니다.
나중에 오는 경우 먼저 Kurt의 답변을 시도하고 여전히 문제가있는 경우이 답변을 시도하십시오.
controller
리디렉션 작업이 리디렉션하려는 작업과 동일한 컨트롤러에 있으면 매개 변수가 선택 사항 이라고 생각합니다 .
RedirectToAction
매개 변수로 :
return RedirectToAction("Action","controller", new {@id=id});
new {id = id}
는 프레임 워크가 참조하는 변수를 알고 있기 때문에 잘 작동합니다.
또한 둘 이상의 매개 변수를 통과 할 수 있다는 점도 주목할 가치가 있습니다. 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
}
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를 사용하는 대신 모델 필드에 문자열을 할당 할 수 있습니다.
매개 변수가 복잡한 개체 인 경우 문제가 해결 됩니다. 열쇠는 RouteValueDictionary
생성자입니다.
return RedirectToAction("Action", new RouteValueDictionary(Model))
컬렉션이있는 경우 조금 까다 롭지 만이 다른 대답은 이것을 아주 잘 다루고 있습니다.
RedirectToAction("Action", "Controller" ,new { id });
나를 위해 일했고, 할 필요가 없었습니다. new{id = id}
나는 같은 컨트롤러 내로 리디렉션하고 있었으므로 "Controller"
컨트롤러가 매개 변수로 필요할 때 뒤에 숨겨진 특정 논리를 확신하지 못합니다.
RedirectToAction("Action", "Controller", new { id = id});
Core 3.1 앱에 필요한 것입니다.
에 대한 오류 메시지를 표시하려면 [httppost]
다음을 사용하여 ID를 전달하여 시도 할 수 있습니다.
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 });
}
}
잘 작동하기를 바랍니다.
몇 년 전 이었지만 어쨌든 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 } ) );
다음은 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
}