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.