Kendo ui 如何配置剑道网格数据源以使用parameterMap功能?

Kendo ui 如何配置剑道网格数据源以使用parameterMap功能?,kendo-ui,Kendo Ui,我有一个剑道网格,我想向我的控制器动作传递一个参数。我能够成功地使用transports read.data,但我正在尝试学习如何使用parameterMap功能 以下是我的作品: <script> $(document).ready(function () { var employeeNumber = @(ViewBag.EmployeeNumber); //passed in from controller $("#ShoppingCartGrid").kend

我有一个
剑道
网格,我想向我的
控制器动作
传递一个参数。我能够成功地使用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){
                    if (operation == "read") {
                       return{
                            employeeNumber:employeeNumber
                          };
                     };
                   }  //parameterMap
                }, //transport

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

$(文档).ready(函数(){
var employeeNumber=@(ViewBag.employeeNumber);//从控制器传入
$(“#ShoppingCartGrid”).kendoGrid({
数据源:{
数据类型:“json”,
键入:“获取”,
运输:{
阅读:{
url:“../requisions/GetShoppingCartSummary/”,
数据:{
employeeNumber:employeeNumber//以这种方式传递参数有效
},
}
},
架构:{
……为简洁起见,略去
下面是不起作用的,但我不知道我应该在这里写什么:

<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>

$(文档).ready(函数(){
var employeeNumber=@(ViewBag.employeeNumber);
$(“#ShoppingCartGrid”).kendoGrid({
数据源:{
数据类型:“json”,
键入:“获取”,
运输:{
阅读:{
url:“../requisions/GetShoppingCartSummary/”
},
parameterMap:function(options,operation){//这里是我的位置
如果(操作==“读取”){//遇到问题-偶数
return employeeNumber:“140412”//硬编码参数-无欢乐
}
};
},
模式:{
……为简洁起见,略去

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

好的,我找到了。我不得不将返回声明放在花括号中

以下是我最后得出的有效结论:

<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){
                    if (operation == "read") {
                       return{
                            employeeNumber:employeeNumber
                          };
                     };
                   }  //parameterMap
                }, //transport

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

$(文档).ready(函数(){
var employeeNumber=@(ViewBag.employeeNumber);
$(“#ShoppingCartGrid”).kendoGrid({
数据源:{
数据类型:“json”,
键入:“获取”,
运输:{
阅读:{
url:“../requisions/GetShoppingCartSummary/”
},
parameterMap:功能(选项、操作){
如果(操作==“读取”){
返回{
雇员编号:雇员编号
};
};
}//参数映射
},//运输
模式:{
…为简洁起见省略

我仍然想找出一些其他的选项,比如如何构建一个可选参数数组,然后返回数组。但这就是我所问问题的答案。希望它能帮助其他人。

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

在您的示例中-employeeNumber:“140412”不是有效的Json,您需要提供以下格式的parmas{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);

谢谢你的回复。如果你的评论是针对我的原始帖子的,那么好吧,但是使用我在回答中发布的parameterMap功能确实有效。我仍然对parameterMap感到困惑,并想了解更多。你知道我可以看的在线真实世界的例子吗?剑道文档几乎一文不值。我特别希望从未绑定表单向控制器传递多个可选参数。保持简单,我有三个文本框,用户可以在其中一个或全部输入搜索条件,然后我将这些值传递给控制器。Thnaks。我的示例是从真实世界复制和粘贴示例,其中包含一些调整,以涵盖其他用例。GlobalVaria在我的示例中,ble指的是诸如您的文本框场景之类的情况,我用一些与文本框相关的示例扩展了我的答案,希望能有所帮助。谢谢!您上次的编辑对我来说很有意义。还有一件事,传入的参数“o”是什么意思在你的第一个例子中的parameterMap函数表示?如果我猜frpm我读到了什么,它将是当前表单上所有成功输入字段的集合。再次感谢你的时间。o aka选项,真正的剑道名称是数据可以包含你需要调用服务器的所有内容,我记得你不喜欢剑道文档t在此处()查看完整列表。在读取的情况下,您将在用于筛选、分页和排序的数据参数值中找到,在其他情况下,您将获得id。id是指您在datasource.schema.model中定义的id列。