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

hid*_*den 84 asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

您好我想从Mvc Controller返回一个锚点

控制器名称= DefaultController;

public ActionResult MyAction(int id)
{
        return RedirectToAction("Index", "region")
}
Run Code Online (Sandbox Code Playgroud)

这样,当指向索引时,url是

http://localhost/Default/#region
Run Code Online (Sandbox Code Playgroud)

以便

<a href=#region>the content should be focus here</a>
Run Code Online (Sandbox Code Playgroud)

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

gdo*_*ica 130

我发现了这种方式:

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

您也可以使用这种冗长的方式:

var url = UrlHelper.GenerateUrl(
    null,
    "Index",
    "DefaultController",
    null,
    null,
    "region",
    null,
    null,
    Url.RequestContext,
    false
);
return Redirect(url);
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/ee703653.aspx

  • 你是一个天才的伙伴!这里我结束了: return new RedirectResult(Url.Action("Index",new{ PKMvrEmployeeId = MvrId }) + "#region"); (2认同)
  • 在 MVC 5 中,当使用 RedirectToAction 时,它似乎将 # 转义为 %23。没有其他人遇到过这种情况吗? (2认同)

Squ*_*all 14

伟大的答案gdoron.这是我使用的另一种方式(只是在这里添加到可用的解决方案).

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

显然,有了gdoron的答案,在这个简单的案例中,这可以成为一个更清洁的人;

return new RedirectResult(Url.Action("Index") + "#anchor_hash");
Run Code Online (Sandbox Code Playgroud)


小智 13

dot net core中的一个简单方法

public IActionResult MyAction(int id)
{
    return RedirectToAction("Index", "default", "region");
}
Run Code Online (Sandbox Code Playgroud)

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

Microsoft 文档 - ControllerBase


小智 5

扩展 Squall 的答案:使用字符串插值可以使代码更清晰。它也适用于不同控制器上的操作。

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