Programing

매개 변수가있는 RedirectToAction

lottogame 2020. 2. 10. 22:03
반응형

매개 변수가있는 RedirectToAction


내가 thusly 히 앵커에서 호출 작업이 입니다 .Site/Controller/Action/IDIDint

나중에 컨트롤러에서 동일한 작업으로 리디렉션해야합니다.

이것을 할 수있는 영리한 방법이 있습니까? 현재 임시 데이터 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



반응형