使用“ RedirectToAction”从控制器重定向到散列

你好,我想从 Mvc 控制器返回一个锚

控制器名称 = 默认控制器;

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

这样当指向 index 时,url 就是

http://localhost/Default/#region

所以

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

我不是问你是否可以这样做: 如何在 URL 中添加锚标记?

26481 次浏览

I found this way:

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

You can also use this verbose way:

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

Great answer gdoron. Here's another way that I use (just to add to the available solutions here).

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

Obviously, with gdoron's answer this could be made a cleaner with the following in this simple case;

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

To Expand on Squall's answer: Using string interpolation makes for cleaner code. It also works for actions on different controllers.

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

A simple way in dot net core

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

The above yields /default/index#region. The 3rd parameter is fragment which it adds after a #.

Microsoft docs - ControllerBase