Html.Kendo Grid的Read动作方法参数中的特殊字符

时间:2017-07-28 12:05:36

标签: c# razor kendo-grid kendo-asp.net-mvc

我有一个Master详细的Html Kendo Grid,其中主网格使用主键列设置其模型ID。该主键列可以具有特殊字符,例如A和12345。在主网格行展开事件上,详细网格数据加载调用发送如

    $(gridName).data("kendoGrid").dataSource.read();

和Html kendo网格的读取操作如下

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

在上面的读取操作中,filterParameterValue包含上面提到的特殊字符i-e。

  

A和12345

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

以下是我的网络

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

无法弄清楚我在这里做错了什么。任何建议都会非常感激。

3 个答案:

答案 0 :(得分:1)

尝试在模板标签内执行转义功能:

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

答案 1 :(得分:0)

事情是“&”浏览器将字符理解为您传递了另一个变量。他明白这样的事情:

/ GridController / GetGridData filterParameter = A&安培;迈德特= TOTO

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

试试:

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

我不确定它是否是严格的转义方法,我还没有测试过这段代码。

答案 2 :(得分:0)

我通过在将模型传递给视图之前对控制器中的值进行编码来解决此问题,如下面的

System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(model.FilterParameterValue))

我已经在我的模型中创建了一个附加属性,它将负责携带此编码值,并在我的控制器操作方法中的视图帖子上,我正在解码它,如下所示

System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(model.FilterParameterValue))