2012-05-21 10 views
73

Witam Chcę wrócić kotwicę z MVC ControllerPrzekierowanie do mieszania ze sterownika za pomocą „RedirectToAction”

nazwa Controller = defaultController;

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

więc, że adres URL, gdy skierowany do indeksu jest

http://localhost/Default/#region 

Więc

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

Nie pytam, czy można zrobić to tak: How can I add an anchor tag to my URL?

+0

http://stackoverflow.com/questions/7904835/how-can-i-add-an-anchor-tag-to-my-url – DevDave

Odpowiedz

115

I znaleziono w ten sposób:

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

Można również użyć tego rozwlekły sposób:

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ś geniuszem kolego! Oto, co robiłem: return new RedirectResult (Url.Action ("Index", nowy {PKMvrEmployeeId = MvrId}) + "#region"); – hidden

+1

+1 za używanie RedirectResult zamiast wywoływania metody Przekierowanie (..). W MVC pod wersją i IIS6 możesz skończyć z wyjątkami spowodowanymi przekierowaniem, ponieważ żądanie jest już przekierowane lub częścią akcji podrzędnej lub treść została już wysłana. – Jaans

+0

To najczystsze rozwiązanie, jakie do tej pory widziałem. Dzięki gdoron – Vincent

12

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

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

Oczywiście, z odpowiedzią gdorona, w tym prostym przypadku można to uczynić czystszym;

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

Pierwsza opcja działa dobrze, jeśli twoja akcja jest w innym kontrolerze. –

3

Aby powiększyć w odpowiedzi Squall: Korzystanie z interpolacji ciągów zapewnia czystszy kod. Działa również dla działań na różnych kontrolerach.

return Redirect($"{Url.RouteUrl(new { controller = "MyController", action = "Index" })}#anchor"); 
Powiązane problemy