我有一个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>
我已经找了几个小时寻找解决方案,但我似乎无法找到一个足以让我理解这个概念的帖子。请不要发送链接到剑道的文档,在那里,有精神伤痕来证明它。谢谢你的任何建议。
答案 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>
我还想弄清楚一些其他选项,比如如何构建可选参数数组然后返回数组。但这是我问的问题的答案。希望它可以帮助别人。