2011-06-08 27 views
3

有没有从通过操作链接发布的路径中获取当前片段。这就是我从路线上获得行动的方式。在Route中获取当前片段,ASP.net MVC

string currentAction = requestContext.RouteData.Values [“action”] as string ?? “指数”;

我可以做类似的事吗?

string currentFragment = requestContext.RouteData.Values [“Fragment”] as string ?? “”;

+1

你可以扩展你的意思是片段?您是否想要获取部分网址? – ataddeini 2011-06-08 22:12:14

+0

散列参数 – brenjt 2011-06-08 22:25:55

回答

13

不,你不能做这样的事情。该片段(#后面的所有内容都不会被浏览器发送到服务器),所以讨论获取url片段服务器端的唯一事实根本就没有意义。

因此,如果您有以下网址:http://example.com/foo/bar?key1=value1#abc服务器将永远无法获取abc,因为客户端永远不会发送它。

+0

请在解释为什么您认为此答案错误时请留下评论? – 2011-06-08 22:14:50

+0

这就是我的想法。如果通过Html.ActionLink发送,该怎么办? – brenjt 2011-06-08 22:18:07

+0

@brenjt,不管它是如何发送的。服务器永远不会得到它。你可以使用一个AJAX调用来分析url,并用#标记后面的部分替换服务器可以读取的普通查询字符串参数。例如,如果你有'http://example.com/foo/bar?key1 = value1#abc',你可以通过AJAX调用来操纵这个URL并用'http://example.com/foo/bar?替换它。 key1 = value1&foo = abc'然后让你的服务器使用'foo'查询字符串参数。但没有JavaScript,你根本就不会得到任何符合你服务器上的'#'符号的东西。 – 2011-06-08 22:18:58

3

因为已经指出,这是不可能的。文档片段(在您称之为散列之后的字符串)仅供浏览器正确定位视口。它们对服务器没有意义,因此不会在那里传输。

但是,您可以使用一种解决方法。重复片段作为你的网址的一部分,使其可以访问的服务器。

看看这个问题答案的永久链接。例如,链接到我的回答是这样的:

http://stackoverflow.com/questions 
/6285833/get-current-fragment-in-route-asp-net-mvc/6286097#6286097 

看到价值6286097如何被复制作为最后的路线参数。这是故意的。你也可以使用这种技术。

P.S.片段必须指向文档中的标识符(某些HTML元素的标识)。至少在XHTML中,只有标识符作为片段工作。有效的ID可能不是以数字开头,而是使用类似#answer-6286097#6286097

P.S.#2。不要使用任何JavaScript欺骗来解决此限制。基本站点功能和设计必须在没有JavaScript的情况下工作 - 不要听任何告诉你的人。碎片显然属于基本工具箱。仅将JavaScript用于高级交互。