2012-03-08 71 views
3

它是一个关于MVC3 Razor的小问题,当我试图调用Controller的详细信息或删除方法时,我有一个类似“a/b”的字符串ID。作为系统假设“a/b”为2个参数而出现错误,但我必须将其传递给一个字符串值参数。MVC3 Razor URL.Action带正斜杠的参数值。给出错误

- 编辑

< a href="@Url.Action("Details", "Search", new {id = "a/b"})">Details </a> 

我的控制器/法就像是 搜索/详细信息(字符串ID)

而且我想给ID = 'A/B'。但.Net假定它是URL中的2个参数。

请建议。

回答

3

看来,正斜杠不会自动编码,其原因可能是因为即使他们被编码(%2F),由时间他们到达路由引擎,他们被解码回正斜杠。 (Phil Haack(MVC团队的前任经理)在this post中搜索Robj)。

但是,.NET MVC Routing w/ Url Encoding Problems提出了相同的问题,并且似乎解决此问题的唯一方法是将编码的斜杠插入到查询字符串中。事情是这样的:

< a href="@Url.Action("Details", "Search")[email protected]("a/b")">Details </a> 

,然后,处理它在你的方法,通过访问:

Request["id"] 
+0

我正在使用webgrid,并有一个链接来呼叫详细信息,但我的ID是'a/b'。请建议如何在MVC3中逃脱。 我的请求是这样的:@ Url.Action(“Details”,“Search”,new {id =“a/b”} 当我点击链接时寻找URL“Search/Details/a/b”和 – Arvind 2012-03-08 16:29:25

+0

我试过这个,但它给了我同样的错误 @ Html.ActionLink(“Text To Display”,“Action”,“Controller”,new {id =“a // b”}) 。 as .Net intrepret again in'a/b' – Arvind 2012-03-08 16:36:17

+0

这很奇怪,我的理解是值应该被转义 – 2012-03-08 16:40:31

0

你应该使用一个转义的网址,因此该参数将a%2Fb

+0

拉撒路嗨,它给我上点击链接错误的请求错误。 – Arvind 2012-03-08 16:39:36

+0

你是说这不起作用吗?@ Html.ActionLink(“Text To Display”,“Action”,“Controller”,new {id =“a%2Fb”})'? – Lazarus 2012-03-08 16:44:57

+0

是的,当我使用“a%2Fb”时,单击按钮出现错误“错误的请求” – Arvind 2012-03-08 16:47:29