2014-12-05 119 views
2

我想有一个像URL链接:/职位/后/ 1#评论如何在ASP.NET MVC中通过url传递特殊字符?

其中:帖子 - 控制器名称,邮政 - 动作的名称,1 - id参数

我使用下面的代码我查看:

<a href="@Url.Action("Post", "Posts", new { id = @item.PostId + "#comments" })">Comments</a> 

因此,我有:/职位/后/ 1%23comments

怎样做才能通过 '#' 字符,而不是 “%23”?

回答

2

你正在寻找:

<a href="@Url.Action("Post", "Posts", new { id = item.PostId })#comments" ...></a> 

#是乱码,所以把它的服务器端(其中Url.Action期待)是指编码它。如果您希望补充客户体验,请不要将其包含在您的Url.Action中(或者创建一个接受片段标识符并输出未触及的特殊重载)。

+0

这就是我的问题的答案。谢谢! – 2014-12-05 14:36:24

+2

技术上:“片段标识符”,而不是哈希 – 2014-12-05 14:42:44

+0

@MarcGravell:TomätoTomâto。我想我把它分组给它[JavaScript API](https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.hash)将其标记为“散列”(即使它是一个散列+片段) 。但我已经说过了。 ;-) – 2014-12-05 14:50:48

1

对于该数据将成为动作的一部分,%23是正确的;如果#代表片段 - 它不是“动作”的一部分。在URL中#表示客户端的片段 - 通常用于通过id跳跃的元素在文档中(服务器不会看到#后的任何一个网址)

参见:(看网址)

+0

是的,但其实我想跳的元素在文档...现在的问题是如何做到这一点? – 2014-12-05 14:31:32

+1

@ user1334190 then:那不是“动作”的一部分,因为动作是服务器端的,而服务器*从不会看到分片*;分别添加'#comments':'href =“@(Url.Action(...))#comments”# – 2014-12-05 14:32:29

+0

href =“@(Url.Action(...))#comments”是一个简单的解决方案。谢谢! – 2014-12-05 14:35:36

0

您还可以使用Html.ActionLink以及适当的过载(fragment参数),而不是手动建立链接。

@Html.ActionLink(
      "Comments", 
      "Post", 
      "Posts", null, null, 
      "comments", // fragment part 
      new { id = @item.PostId }, 
      new { }) 
+0

我知道,谢谢! – 2014-12-05 14:39:42

+0

对于ref ['Html.ActionLink(HtmlHelper,string,string,string,string,string,string,object,object)'](http://msdn.microsoft.com/zh-cn/library/dd460522(v = vs.118).aspx)&['Html.ActionLink(HtmlHelper,string,string,string,string,string,string,RouteValueDictionary,IDictionary )'](http://msdn.microsoft.com/ EN-US /库/ dd460522(v = vs.118)的.aspx)。 – 2014-12-05 14:42:21