Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Html.Kendo网格的Read action方法参数中的特殊字符_C#_Razor_Kendo Grid_Kendo Asp.net Mvc - Fatal编程技术网

C# Html.Kendo网格的Read action方法参数中的特殊字符

C# Html.Kendo网格的Read action方法参数中的特殊字符,c#,razor,kendo-grid,kendo-asp.net-mvc,C#,Razor,Kendo Grid,Kendo Asp.net Mvc,我有一个主详细的Html剑道网格,其中主网格使用主键列设置其模型Id。此主键列可能具有特殊字符,例如a&12345。在主网格行展开事件上,发送详细网格数据加载调用,如下所示 $(gridName).data("kendoGrid").dataSource.read(); Html剑道网格的读取操作如下 .Read(read => read.Action("GetGridData", "GridController", new { filterParameter = "#=filt

我有一个主详细的Html剑道网格,其中主网格使用主键列设置其模型Id。此主键列可能具有特殊字符,例如a&12345。在主网格行展开事件上,发送详细网格数据加载调用,如下所示

    $(gridName).data("kendoGrid").dataSource.read();
Html剑道网格的读取操作如下

.Read(read => read.Action("GetGridData", "GridController", new { filterParameter = "#=filterParameterValue#" }))
System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(model.FilterParameterValue))
在上述读取操作中,filterParameterValue包含上述特殊字符,即

A&12345

现在在网络流量中,我可以看到A&12345正在被传递,但是当我查看控制器操作方法时,它只在参数值中显示A,其他所有内容都被截断

以下是我从网络上得到的信息

/GridController/GetGridData?filterParameter=A&12345 HTTP POST 200应用程序/json 0.64 KB 55.50 s XMLHttpRequest 10108 0 16 55490 0 676295

我不知道我做错了什么。任何建议都将不胜感激。

重要的是,浏览器可以理解“&”字符,就好像您传递了另一个变量一样。他知道这样的事情:

/GridController/GetGridData?filterParameter=A&MyData=toto

因此,您需要对值进行编码

试试看:

.Read(read => read.Action("GetGridData", "GridController", new { filterParameter = Uri.EscapeDataString("#=filterParameterValue#") }))

我不确定它是否是rigth escape方法,我还没有测试过这段代码。

只要尝试在模板标记内执行escape函数即可:

.Read(read => read.Action("GetGridData", "GridController", new { filterParameter = "#=escape(filterParameterValue)#" }))

我已经解决了这个问题,在将模型传递给视图之前,在控制器中对值进行编码,如下所示

System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(model.FilterParameterValue))
我已经在我的模型中创建了一个额外的属性,它将负责携带这个编码的值,在我的控制器操作方法中的视图帖子上,我正在像下面那样解码它

.Read(read => read.Action("GetGridData", "GridController", new { filterParameter = "#=filterParameterValue#" }))
System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(model.FilterParameterValue))

嗨,告诉我,你想要你的过滤器参数是什么?因为正如我看到的,您正在发布一个完整的xml请求,我想您不希望这样。因此,我建议您查看filterParameterValue以了解其中的内容及其原因。我希望将&12345传递给我的控制器操作方法我知道它被视为保留字,但解决方案是什么?而且,它不仅仅是关于“&”,它还可以是任何其他特殊字符。我需要一些傻瓜式的解决方案,这样所有的特殊字符都可以传递给控制器动作方法。它不做这项工作。我正在将%23%3filterParameterValue%23发回控制器操作方法是的。。。我的错。。。您需要转义filterParameterValue中的值,但它是javascript。。。对不起,我不知道怎么做。这解决了我的问题!应将其标记为正确答案。非常感谢。请包括逃生功能。