매개 변수가있는 RedirectToAction
내가 thusly 히 앵커에서 호출 작업이 입니다 .Site/Controller/Action/ID
ID
int
나중에 컨트롤러에서 동일한 작업으로 리디렉션해야합니다.
이것을 할 수있는 영리한 방법이 있습니까? 현재 임시 데이터 ID
를 숨기고 있지만 f5 키를 눌러 되돌아 가서 페이지를 다시 새로 고치면 임시 데이터가 사라지고 페이지가 충돌합니다.
RedirectToAction () 메소드의 routeValues 매개 변수의 일부로 id를 전달할 수 있습니다.
return RedirectToAction("Action", new { id = 99 });
이로 인해 Site / Controller / Action / 99로 리디렉션됩니다. 임시 또는 모든 종류의 뷰 데이터가 필요하지 않습니다.
커트의 대답 은 내 연구에서 옳 아야 하지만 시도했을 때 실제로 나를 위해 일하기 위해서는이 작업을 수행해야했습니다.
return RedirectToAction( "Main", new RouteValueDictionary(
new { controller = controllerName, action = "Main", Id = Id } ) );
컨트롤러를 지정하지 않으면 컨트롤러의 동작이 RouteValueDictionary
작동하지 않습니다.
또한 이와 같이 코딩하면 첫 번째 매개 변수 (Action)가 무시되는 것 같습니다. 따라서 Dict에서 컨트롤러를 지정하고 첫 번째 매개 변수가 동작을 지정해야한다면 작동하지 않습니다.
나중에오고 있다면 Kurt의 답변을 먼저 시도하고 여전히 문제가 있으면 이것을 시도하십시오.
RedirectToAction
매개 변수로 :
return RedirectToAction("Action","controller", 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를 사용하는 대신 모델 필드에 문자열을 할당 할 수 있습니다.
//How to use RedirectToAction in MVC
return RedirectToAction("actionName", "ControllerName", routevalue);
예
return RedirectToAction("Index", "Home", new { id = 2});
매개 변수가 복잡한 개체 인 경우 문제가 해결 됩니다. 열쇠는 RouteValueDictionary
생성자입니다.
return RedirectToAction("Action", new RouteValueDictionary(Model))
컬렉션이있는 경우 조금 까다 롭지 만이 다른 대답은 이것을 아주 잘 다루고 있습니다.
에 대한 오류 메시지를 표시하려면 [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 });
}
}
잘 작동하기를 바랍니다.
....
int parameter = Convert.ToInt32(Session["Id"].ToString());
....
return RedirectToAction("ActionName", new { Id = parameter });
나는이 문제도 가지고 있었고, 같은 컨트롤러 내에 있으면 명명 된 매개 변수를 사용하는 것이 좋습니다.
return RedirectToAction(actionName: "Action", routeValues: new { id = 99 });
몇 년 전 이었지만 어쨌든 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 } ) );
컨트롤러 외부의 작업으로 리디렉션 해야하는 경우 작동합니다.
return RedirectToAction("ACTION", "CONTROLLER", new { id = 99 });
RedirectToAction("Action", "Controller" ,new { id });
나를 위해 일했고, 할 필요가 없었습니다. new{id = id}
나는 같은 컨트롤러 내로 리디렉션하고 있었으므로 "Controller"
컨트롤러가 매개 변수로 필요할 때 뒤에 숨겨진 특정 논리를 확신하지 못합니다.
다음은 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
}
참고 URL : https://stackoverflow.com/questions/1257482/redirecttoaction-with-parameter
'Programing' 카테고리의 다른 글
기본 파이썬 반복기 빌드 (0) | 2020.02.10 |
---|---|
Lollipop의 최신 Chrome 버전에서 헤더 바와 주소 표시 줄의 색상을 변경하는 방법은 무엇입니까? (0) | 2020.02.10 |
macOS Mojave (10.14)에서 Lion (10.7)의 JAVA_HOME은 어디에 있습니까? (0) | 2020.02.10 |
프로그래밍 방식으로 기본 UIButton을 작성하는 방법 (0) | 2020.02.10 |
Chrome DevTools의 요소에서 발생한 이벤트를 보려면 어떻게합니까? (0) | 2020.02.10 |