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?



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


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");

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


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");
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.