2

我有一个KendoGrid,我想将一个参数传递给我的Controller Action. 我能够成功使用传输 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>

我已经找了几个小时来寻找解决方案,但我似乎找不到一篇足以很好地解释这个概念的帖子让我理解。请不要发送指向 Kendo 文档的链接,去过那里,有精神伤疤来证明这一点。感谢您的任何建议。

4

2 回答 2

1

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

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

使用 JSON.stringify(o) 来获取正确的参数非常方便。

下面的 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);
于 2013-10-16T09:07:37.850 回答
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>

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

于 2013-10-16T00:19:39.193 回答