2013-10-15 127 views
2

我有一個Kendo網格,我想傳遞一個參數給我的Controller Action。我能夠成功使用傳輸read.data,但我試圖學習如何使用parameterMap功能。如何配置Kendo Grid數據源以使用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> 

我特地爲小時一個解決方案,但我似乎無法找到一個解釋這個概念的帖子,足以讓我掌握。請不要發送鏈接到劍道的文件,在那裏,有精神傷痕證明。感謝您的任何建議。

回答

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); 
+0

感謝答覆。如果您的評論是參考我的原始文章,然後確定,但使用我發佈在我的答案中的parameterMap函數確實有效。我仍然被parameterMap困惑,並想了解更多。你知道我可以看到的在線真實世界的例子嗎?劍道文件幾乎沒有價值。我特別希望將多個可選參數從未綁定的表單傳遞給控制器​​。保持簡單我有三個文本框,用戶可以在一個或全部輸入搜索條件,然後將這些值傳遞給控制器​​。 Thnaks。 –

+0

我的例子是從現實世界的例子中複製和粘貼,並進行一些調整以涵蓋其他用例。我的示例中的GlobalVariable引用了案例,比如您的文本框場景,我已經用一些與文本框相關的示例擴展了我的答案,希望它能對您有所幫助。 – Vojtiik

+0

謝謝!你最後的編輯對我有意義。還有一件事,在第一個例子中,參數「o」傳遞給parameterMap函數的代表是什麼?如果我猜想frpm我讀過的內容是當前表單上所有成功輸入字段的集合。感謝你的寶貴時間。 –

0

好吧,我想通了。我不得不用括號括起返回語句。

這裏是我結束了的作品:

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

我還是想找出一些其他的選項,如如何構建可選參數數組,然後返回數組。但這是我問的問題的答案。希望它可以幫助別人。

相關問題