Przekieruj do skrótu ze sterownika za pomocą „RedirectToAction”

87

Witam Chcę zwrócić kotwicę z kontrolera MVC

Nazwa kontrolera = DefaultController;

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

Tak więc adres URL po przekierowaniu do indeksu to

http://localhost/Default/#region

Po to aby

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

Nie pytam, czy możesz to zrobić w następujący sposób : Jak dodać znacznik kotwicy do mojego adresu URL?

ukryty
źródło

Odpowiedzi:

133

Znalazłem w ten sposób:

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

Możesz także użyć tej szczegółowej metody:

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

gdoron wspiera Monikę
źródło
1
Jesteś genialnym partnerem! Oto co skończyłem robić: zwróć new RedirectResult (Url.Action ("Index", new {PKMvrEmployeeId = MvrId}) + "#region");
ukryty
1
+1 za używanie RedirectResult zamiast wywoływania metody Redirect (..). W MVC w wersji w wersji i IIS6 możesz skończyć z wyjątkami spowodowanymi przekierowaniem, ponieważ żądanie jest już prawdopodobnie przekierowane, część akcji podrzędnej lub zawartość jest już wysłana.
Jaans
2
W MVC 5, podczas korzystania z RedirectToAction wydaje się, że zmienia znaczenie # do% 23. Czy nikt inny tego nie doświadcza?
jakejgordon
W moim przypadku, gdy używam tej samej metody, powraca.
Zeeshan Ahmad Khalil
14

Świetna odpowiedź, gdoron. Oto inny sposób, którego używam (tylko po to, aby dodać do dostępnych tutaj rozwiązań).

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

Oczywiście, z odpowiedzią gdorona, można by to uprościć z następującymi w tym prostym przypadku;

return new RedirectResult(Url.Action("Index") + "#anchor_hash");
Szkwał
źródło
Pierwsza opcja działa dobrze, jeśli akcja jest wykonywana w innym kontrolerze.
Chad Hedgcock
9

Prosty sposób na rdzeń z siatki

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

Powyższe daje / default / index # region . Trzeci parametr to fragment, który dodaje po #.

Microsoft Docs - ControllerBase

Dermot
źródło
4

Aby rozwinąć odpowiedź Squalla: użycie interpolacji ciągów zapewnia czystszy kod. Działa również w przypadku działań na różnych kontrolerach.

return Redirect($"{Url.RouteUrl(new { controller = "MyController", action = "Index" })}#anchor");
Jon T. UK
źródło