使用“ RedirectToAction”从控制器重定向到哈希


87

您好我想从Mvc控制器返回锚点

控制器名称= DefaultController;

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

因此,指向索引的网址是

http://localhost/Default/#region

以便

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

我不是问您是否可以这样做:如何向我的URL添加定位标记?



Answers:


133

我发现是这样的:

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”);
隐藏

1
+1用于使用RedirectResult而不是调用Redirect(..)方法。在MVC发行版和IIS6中,由于请求可能已被重定向,子操作的一部分或内容已被发送,您最终可能会因重定向而导致异常。
哈恩斯

2
在MVC 5中,使用RedirectToAction时似乎会将#转义为%23。没有其他人会遇到这种情况吗?
jakejgordon

对我来说,当我使用相同的方法时,它又重新恢复了。
Zeeshan Ahmad Khalil

14

好的答案,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");

如果您的操作在其他控制器中,则第一个选项效果很好。
乍得·黑德考克

9

点网核心的简单方法

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

上面产生/ default / index#region。第三个参数是片段,它在#之后添加。

Microsoft文档-ControllerBase


4

扩展Squall的答案:使用字符串插值可以使代码更简洁。它还适用于在不同控制器上执行的操作。

return Redirect($"{Url.RouteUrl(new { controller = "MyController", action = "Index" })}#anchor");
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.