2012-05-21 44 views
73

你好我想從控制器的mvc重定向到來自所述控制器的散列使用「RedirectToAction」

控制器名稱= DefaultController返回的錨定;

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

這樣當指向索引網址是

http://localhost/Default/#region 

這樣

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

我不問,如果你能做到這一點是這樣的: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

回答

115

我這樣找到:

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」); – hidden

+1

用於使用RedirectResult而不是調用Redirect(..)方法。 在發佈的MVC和IIS6中,最終可能會由於重定向導致異常,因爲請求可能已被重定向,或者是子操作的一部分,或者內容已經發送。 – Jaans

+0

這是迄今爲止我見過的最乾淨的解決方案。謝謝gdoron – Vincent

12

大答案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"); 
+0

如果您的操作位於不同的控制器中,則第一個選項可以很好地工作。 –

3

要擴大Squall的答案:使用字符串插值使得代碼更簡潔。它也適用於不同控制器上的操作。

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