ActionLink中的特殊字符。 asp mvc

时间:2013-03-29 04:10:12

标签: asp.net-mvc razor

我正在使用asp.net mvc 4来构建Web应用程序。

要创建一个动作的url我正在使用ActionLink,如下所示:

@Html.ActionLink("Details", "Details", new { id=item.PrimaryKey })

item.PrimaryKey可以是一个字符串,因此它可以包含点或斜线或任何其他特殊字符;如果它包含点或斜线,我会得到一个404 error。 ¿我该怎样避免它?

我在这里找到了解决方案

http://mrpmorris.blogspot.mx/2012/08/asp-mvc-encoding-route-values.html

但其复杂的

¿有更简单的解决方案吗?

2 个答案:

答案 0 :(得分:3)

  

我在这里找到了解决方案

     

http://mrpmorris.blogspot.mx/2012/08/asp-mvc-encoding-route-values.html

     

但其复杂的

那是因为你试图解决的问题很复杂。您可以查看Scott Hanselman的following blog post,其中他解释了这样做的各种挑战。我将总结他的结论:

  

在完成所有这些努力以获得请求路径中的疯狂内容之后,就是这样   值得一提的是,只需将值保留为Query的一部分   字符串(记得在这篇文章的开头回答?)更容易,   更清洁,更灵活,更安全。

所以基本上如果你的id可以包含任何字符,它们应该作为查询字符串参数传递,而不是Uri路径的一部分。

但是如果你坚持并希望将id作为Uri路径的一部分,那么你可能会受到StackOverflow如何做到的启发。现在查看浏览器的地址栏。你会看到这个:

https://stackoverflow.com/questions/15697189/special-characters-in-actionlink-asp-mvc

注意网址如何包含2个令牌:实际ID和SEO友好名称。 Jeff Atwood展示了他们用来生成那些SEO友好 slugs sample filter function。 slu is仅用于搜索引擎优化目的。您可以将其替换为您想要的任何内容并获得相同的结果:

https://stackoverflow.com/questions/15697189/foo-bar

答案 1 :(得分:0)

您可以使用Server.UrlEncode()对其进行编码:

@Html.ActionLink("Details", "Details", new { id=Server.UrlEncode(item.PrimaryKey) })

reference to msdn with example