如何将具有空格或句点的查询字符串传递给控制器​​?

时间:2016-04-01 15:33:58

标签: c# asp.net-mvc kendo-ui asp.net-mvc-routing query-string

Hello其他程序员,

我正在努力使用我的MVC应用程序。我有一个查询字符串,我想传递给我的控制器,让我们称之为“快乐的日子”但是当从我的视图中传入字符串时,它只会传入“快乐”并停止因为有空格。同样地,如果字符串是“Happy.Days”,它只会传入“Happy”并在此期间停止。

我的问题是如何传递完整字符串并包含空格或句点?

该字符串是从Kendo网格中的客户端模板传入的,这是我在客户端模板中用于处理该字符串的代码。即使这是以另一种方式完成的,空间仍然是一个问题,但是这样你就可以看到我的场景。

"<a data-identity='#=owner_company#' data-toggle='modal' data-target='\\#owner_details' href='" + Url.Action("OwnerModal", "Home") + "/" + Server.UrlEncode("#=owner_company#") + "'>#=owner_company#</a>");

您会看到我尝试使用URLEncode,但这没有帮助。

视图中构造的URL如下:

<a href="/Project/Home/Owner/Happy Days" data-target="#owner_details" data-toggle="modal" data-identity="modal">Happy Days</a> 

正如你所看到的那样,它的字符串中包含了预期的空格。

无论如何我可以修复此问题或在我的视图中正确编码以传递给控制器​​。

由于

2 个答案:

答案 0 :(得分:1)

尝试将代码更改为:

mysite
mytest
templates
   base.html
   index.html
   registration

这样就可以使用"<a data-identity='#=owner_company#' data-toggle='modal' data-target='\\#owner_details' href='" + Url.Action("OwnerModal", "Home") + "/#= encodeURIComponent(owner_company) #"'>#=owner_company#</a>"); 客户端使用javascript对URI参数进行编码,这是正确的方法,因为Kendo UI使用了客户端模板系统。

答案 1 :(得分:0)

Server.UrlEncode似乎很糟糕。它不是对空间进行编码,这会导致您的头痛服务器端。一些初步研究表明它的存在是为了向后兼容,这可能是它失败的原因。

相反,您应该使用Uri.EscapeUriString()

<a href='" + 
    Url.Action("OwnerModal", "Home") + 
    "/" +
    Uri.EscapeUriString("#=owner_company#") + 
    "'>#=owner_company#</a>

Uri.EscapeUriString("#=owner_company#")对我来说很奇怪,但是如果有效的话,就把自己搞得一团糟。如果没有,......修好它吗?)