在ASP.NET MVC URL路由中包含哈希值

fac*_*ook 54 asp.net-mvc routes

我需要实现哈希值,即Url应该如下所示:

/家庭/索引/#创建

为此添加了一条路线:

routes.MapRoute(
    "Default",    // Route name
    "{controller}/{action}/#{detail}",    // URL with parameters
    new { controller = "Login", action = "LogIn",  detail  =""}  // Parameter defaults
);
Run Code Online (Sandbox Code Playgroud)

在访问时/home/index/#create,它将我重定向到默认路由.

如何才能做到这一点?

Ror*_*san 108

如上所述,使用路由无法做到这一点.唯一可行的解​​决方案是在控制器的操作中重定向时将#片段附加到您的URL.例如.

return Redirect(Url.Action("Index", "Home") + "#create");
Run Code Online (Sandbox Code Playgroud)

  • IMO这应该是公认的答案.OP问道:"这怎么办?" 这是唯一能给你一个合理的解决方法的答案,而不是为什么你不能像OP最初想要的那样去做. (11认同)
  • 我只是花了 20 分钟试图找出如何创建一个“return View()”方法来允许哈希参数或任何其他操作结果 - 这是完美的。好答案! (2认同)

Dar*_*rov 51

您无法#在服务器上的符号后面获取值,因为此值永远不会发送到服务器.只有客户端javascript可以访问这个,所以定义带有哈希的路由没有多大意义.

  • 有道理.我的`#hash`用于记忆所选菜单(我不想要cookie).当用户单击菜单时,`#`发生更改并向服务器发出AJAX请求以更新相应的内容.通过这种方式,用户能够使用所选菜单为页面添加书签,并且可以使用具有可读"#menuname"的浏览器后退按钮.下次当用户使用`#`浏览时,加载的页面已经具有所选菜单而没有不必要的AJAX请求.我需要将哈希值绑定到路由数据中,因为每个`#`都可以被视为不同的页面. (12认同)

Rob*_*evy 7

当浏览器发出URL请求时,它不会在散列后向服务器发送任何内容.此路由可以使您生成包含哈希值的路由URL,但是当用户导航到此类URL时,无法在服务器端执行任何操作.这就是网络的运作方式......