如何配置Kendo Grid dataSource以使用parameterMap功能?

时间:2013-10-15 23:25:43

标签: kendo-ui

我有一个Kendo网格,我想将参数传递给我的Controller Action。我能够成功使用transports read.data,但我正在尝试学习如何使用parameterMap功能。

这就是我的工作:

<script>
$(document).ready(function () {
    var employeeNumber = @(ViewBag.EmployeeNumber);  //passed in from controller
    $("#ShoppingCartGrid").kendoGrid({

        dataSource: {
            dataType: "json",
            type:"GET",
            transport: {
                read: {
                    url:"../Requisitions/GetShoppingCartSummary/",
                    data: {
                        employeeNumber:employeeNumber  //passing param this way works
                    },
                }

            },
            schema: {  
 ...... //omitted for brevity
 </script>

这是什么不起作用,但我不知道我应该放在这里:

<script>
$(document).ready(function () {
    var employeeNumber = @(ViewBag.EmployeeNumber);
    $("#ShoppingCartGrid").kendoGrid({

        dataSource: {
            dataType: "json",
            type:"GET",
            transport: {
                read: {
                    url:"../Requisitions/GetShoppingCartSummary/"

                },
                parameterMap:function(options,operation){  // here is where I'm 
                    if (operation == "read") {            // running into issues- even  
                        return employeeNumber:"140412"; // hard coding param- no joy
                    }
                };

            },
            schema: {
  ...... //omitted for brevity
  </script>

我已经找了几个小时寻找解决方案,但我似乎无法找到一个足以让我理解这个概念的帖子。请不要发送链接到剑道的文档,在那里,有精神伤痕来证明它。谢谢你的任何建议。

2 个答案:

答案 0 :(得分:1)

您的传输数据类型是Json,因此您需要返回有效的Json参数。 Kendo将parameterMap中提供的函数结果附加到您在url中定义的方法名称。

在您的情况下 - employeeNumber:“140412”不是有效的Json,您需要提供以下格式的parmas {paramname:value,otherparamname:value}。

使用JSON.stringify(o)来使你的params正确是非常方便的。

下面的parameterMap结构适用于我:

parameterMap: function (o, operation) {
                        var output = null;
                        switch (operation) {
                            case "create":
                                output = '{ id: ' + JSON.stringify(o) + ' }';
                                break;
                            case "read":
                                output = '{ id: ' + globalVariable + ' ,  filters: ' + JSON.stringify(o) + '}';
                                break;
                            case "update":
                                output = '{ id:' + JSON.stringify(o) + '}';
                                break;
                            case "destroy":
                                output = '{ id : ' + o.param+ ' }';
                                break;
                        }
                        return output;
                    }

根据您的评论更多细节:

 parameterMap: function (o, operation) {
                        var output = null;
                        switch (operation) {
                             case "read":
                             var txt1 = $('#myTextBox1').val();
                             var txt2 = $('#myTextBox2').val();
                             var txt3 = $('#myTextBox3').val();
                             output = '{ textBoxValue1: ' + txt1  + ', textBoxValue2: ' + txt2 + ',textBoxValue3: ' + txt3 + '}';
                              break;
                            }
                            return output;
                        }

服务器端方法签名应如下所示:

GetShoppingCartSummary(string textBoxValue1, string textBoxValue2, textBoxValue3);

答案 1 :(得分:0)

好的,我明白了。我不得不将return语句括在大括号中。

以下是我最终得到的结果:

 <script>
$(document).ready(function () {
    var employeeNumber = @(ViewBag.EmployeeNumber);
     $("#ShoppingCartGrid").kendoGrid({
        dataSource: {
            dataType: "json",
            type:"GET",
            transport: {
                read: {
                    url:"../Requisitions/GetShoppingCartSummary/"

                    },
                parameterMap:function(options,operation){
                    if (operation == "read") {
                       return{
                            employeeNumber:employeeNumber
                          };
                     };
                   }  //parameterMap
                }, //transport

        schema: {
....Omitted for Brevity
</script>

我还想弄清楚一些其他选项,比如如何构建可选参数数组然后返回数组。但这是我问的问题的答案。希望它可以帮助别人。