如何从HttpRequestBase中获取“#”之后的url部分

时间:2009-08-28 11:42:50

标签: asp.net-mvc

我收到像这样的GET请求

http://localhost/controller/List#SearchGuid=755d259d-e7c9-4c5a-bf2a-69f65f63df8d

我需要阅读#之后的SearchGuid。 不幸的是,HttpRequestBase似乎隐藏了#。

之后的所有内容

有人知道我怎么还能从控制器动作中读取SearchGuid吗?

TIA。

4 个答案:

答案 0 :(得分:18)

你不能,它不会被发送到服务器。

答案 1 :(得分:3)

如果你想处理网址“片段”(这就是调用'#'之后的那些东西),你需要这样做客户端。碎片不会传输到服务器。

重新设计协议以使用查询字符串(将'#'替换为'?'),或者在客户端上使用javascript进行必要的处理 - 这可能包括在URI查询中发出编码片段的服务器请求字符串。

答案 2 :(得分:2)

你可以使用window.location.hash在客户端的JavaScript中获取该部分,将其设置为onububmit上的一些隐藏输入,这样它们也会被发送到服务器。

答案 3 :(得分:2)

'#'片段只能在客户端访问,但IE8提交的URL包括#fragment part。

您可以使用Ajax使其正常工作。类似的东西:

var fragment = location.hash; // on page load
$.get('/yoururl' + '?' + fragment.replace(/^.*#/, ''));

看起来你在客户端请求URL#fragment,但实际上,它会请求URL?片段,你可以在服务器端使用它。

你应该记住的一件事 - 服务器页面将被请求两次,所以第二个(Ajax请求 - 检查请求标题“X-Requested-With = XMLHttpRequest”)你应该采取。

P.S。使用相同解决方案的Google应用程序,正如我在Firebug中看到的那样。