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

本文关键字:特殊字符 ASP NET url MVC | 更新日期: 2023-09-27 18:33:24

我想要一个网址链接,例如:/Posts/Post/1#comments

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

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

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

结果我有:/帖子/帖子/1%23评论

如何传递"#"字符而不是"%23"?

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

您正在寻找:

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

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

对于该数据成为操作的一部分,%23是正确的;如果#表示一个片段 - 它不是"操作"的一部分。url 中的#表示客户端片段 - 通常用于按id跳转到文档中的元素(服务器在 url 中的#之后永远不会看到任何内容)

另请参阅:c#(查看网址)

您也可以使用具有正确 oveload(fragment参数)的Html.ActionLink,而不是手动构建链接。

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