"RedirectToAction"을 사용하여 컨트롤러에서 해시로 리디렉션


87

안녕하세요 Mvc 컨트롤러에서 앵커를 반환하고 싶습니다.

컨트롤러 이름 = DefaultController;

public ActionResult MyAction(int id)
{
        return RedirectToAction("Index", "region")
}

색인으로 이동할 때 URL이

http://localhost/Default/#region

그래서

<a href=#region>the content should be focus here</a>

다음과 같이 할 수 있는지 묻지 않습니다. 내 URL에 앵커 태그를 추가하려면 어떻게해야합니까?



답변:


133

이 방법을 찾았습니다.

public ActionResult MyAction(int id)
{
    return new RedirectResult(Url.Action("Index") + "#region");
}

다음과 같은 자세한 방법을 사용할 수도 있습니다.

var url = UrlHelper.GenerateUrl(
    null,
    "Index",
    "DefaultController",
    null,
    null,
    "region",
    null,
    null,
    Url.RequestContext,
    false
);
return Redirect(url);

http://msdn.microsoft.com/en-us/library/ee703653.aspx


1
당신은 훌륭한 친구입니다! 여기서 내가 한 일은 다음과 같습니다. return new RedirectResult (Url.Action ( "Index", new {PKMvrEmployeeId = MvrId}) + "#region");
숨김

1
Redirect (..) 메서드를 호출하는 대신 RedirectResult를 사용하면 +1. 릴리스중인 MVC 및 IIS6에서는 요청이 이미 리디렉션되었거나 하위 작업의 일부이거나 콘텐츠가 이미 전송 되었기 때문에 리디렉션으로 인해 예외가 발생할 수 있습니다.
Jaans 2013-08-08

2
MVC 5에서 RedirectToAction을 사용할 때 #을 % 23으로 이스케이프하는 것처럼 보입니다. 아무도 이것을 경험하지 않습니까?
jakejgordon

저에게는 같은 방법을 사용하면 다시 백업됩니다.
Zeeshan Ahmad Khalil

14

좋은 대답 gdoron. 여기에 내가 사용하는 다른 방법이 있습니다 (여기에서 사용 가능한 솔루션에 추가하기 위해).

return Redirect(String.Format("{0}#{1}", Url.RouteUrl(new { controller = "MyController", action = "Index" }), "anchor_hash");

분명히, gdoron의 대답으로 이것은이 간단한 경우에 다음과 같이 더 깨끗해질 수 있습니다.

return new RedirectResult(Url.Action("Index") + "#anchor_hash");

첫 번째 옵션은 작업이 다른 컨트롤러에있는 경우 잘 작동합니다.
Chad Hedgcock 2015

9

닷넷 코어의 간단한 방법

public IActionResult MyAction(int id)
{
    return RedirectToAction("Index", "default", "region");
}

위의 결과는 / default / index # region 입니다. 세 번째 매개 변수는 # 뒤에 추가하는 조각 입니다.

Microsoft Docs-ControllerBase


4

Squall의 답변을 확장하려면 문자열 보간을 사용하면 코드가 더 깔끔해집니다. 또한 다른 컨트롤러의 작업에도 작동합니다.

return Redirect($"{Url.RouteUrl(new { controller = "MyController", action = "Index" })}#anchor");
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.