如何在ASP.NET MVC中通过url传递特殊字符?

时间:2014-12-05 14:26:46

标签: c# asp.net-mvc fragment-identifier

我希望有一个网址链接:/帖子/帖子/ 1#评论

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

我在我的视图中使用以下代码:

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

因此我有:/帖子/帖子/ 1%23评论

如何通过&#39;#&#39; char而不是&#34;%23&#34;?

3 个答案:

答案 0 :(得分:2)

你正在寻找:

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

#用于散列,因此将其发送到服务器端(Url.Action预期)意味着对其进行编码。如果您希望补充客户端体验,请不要将其包含在Url.Action中(或创建一个特殊的重载,接受片段标识符并将其输出为未触及)。

答案 1 :(得分:1)

要将该数据作为操作的一部分,%23是正确的;如果#表示片段 - ,则它不属于“操作”。 url中的#表示客户端片段 - 通常用于通过id跳转到文档中的元素(服务器永远不会在URL中的#之后看到任何内容)< / p>

另请参阅:(查看网址)

答案 2 :(得分:0)

您还可以将Html.ActionLink与正确的oveload(fragment参数)一起使用,而不是手动构建链接。

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