【问题标题】:How to Encode '/' in ASP.NET MVC Razor如何在 ASP.NET MVC Razor 中编码“/”
【发布时间】:2016-10-10 19:43:26
【问题描述】:

控制器:

public ActionResult Tool(string id)
{
  // Code goes here . . 
}

查看:

<a href="/Home/@item.Type/@Url.Encode(item.Title)" id="toolTitleLink">@item.Title</a>

从上面的代码中,@item.Title 可以有特殊字符,例如“/”示例链接是 http://localhost:39727/Home/Tool/C+Compiler+For+The+Pic10%2f12%2f16+Mcus,当我尝试导航到该链接时,Tool Controller 未被调用。我使用了@Url.Encode,但仍然没有调用Controller

【问题讨论】:

  • 您可以在 /Home/Tool/ 部分之后捕获 id 中的所有符号,并使用包罗万象的路线。看到这个answer
  • 谢谢@IvanGritsenko 它可以工作,但我想将它应用到多个动作,我需要为每个动作创建自定义路由吗?

标签: c# asp.net-mvc razor


【解决方案1】:

不幸的是,即使您像这样使用System.Uri.EscapeDataString 而不是Url.Encode

<a href="/Home/@item.Type/@System.Uri.EscapeDataString(item.Title)" id="toolTitleLink">@item.Title</a>

呈现的页面将对斜线进行编码(查看页面的“查看源代码”),浏览器仍会对其进行解码。

据我所知,您有两个选择:

  1. 使用不同的字符 - 进行自己的转义(可以这么说;)) - 例如使用 tilda (~) 或其他任何你想要的 URL valid character,以替换正斜杠。

  2. 使用a catch-all at the end 为动作创建一个特殊的路由并解析动作中的内容。

【讨论】:

    猜你喜欢
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    相关资源
    最近更新 更多