"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.