Asp.net-Mvc

Kendo UI - 在讀取數據源時指定參數名稱

  • July 15, 2016

使用Kendo UI,我正在使用一個自動完成框來嘗試從我的伺服器檢索數據。它正在使用具有以下簽名的ASP.NET MVC控制器。

public ActionResult aspect(string term){
  // ...
}

這意味著請求需要在 url 中有正確的參數。現在我遇到的問題是我找不到在dataSource機制中指定它的方法。我已經閱讀了數十次有關parameterMap的文件,但對我來說絕對沒有任何意義。

由於所討論的頁面實際上在任何時候都有 10-15 個自動完成文本框,每個都使用動態標識動態創建,這一事實使情況變得更加複雜。

到目前為止我使用的程式碼如下;

$(".autocomplete").kendoAutoComplete({
   dataTextField: "Name",
   dataSource: {
       type: "json",
       transport: {
           read: {
               url: "/search/aspect"
           }
       }
   }
});

那麼我能做些什麼來告訴它如何命名它傳遞的參數嗎?

為了更清楚我想要做什麼,如果我在jQuery中這樣做,我會使用…

$.ajax({ url: '/search/aspects', data: { term: (insert the data here) } });

但是由於所有這些工作的方式,沒有設置“選擇器”來獲取自動完成輸入,所以我無法從輸入表單元素中檢索它的值。

首先,通過設置此選項啟用伺服器端過濾:

dataSource: {
   serverFiltering: true,

然後將該值作為參數之一傳遞給transport.parameterMap函式。

如果您要像這樣記錄傳遞給 parameterMap 函式的對象:

$(".autocomplete").kendoAutoComplete({
   dataTextField: "Name",
   dataSource: {
       serverFiltering: true,
       type: "json",
       transport: {
           read: {
               url: "/search/aspect"
           },
           parameterMap: function (data, action) {
               console.log(data);
           }
       }
   }
});

然後你會得到一個看起來像這樣的對象:

{
   "filter":{
       "logic":"and",
       "filters":[
           {
               "value":"something",
               "operator":"contains",
               "field":"Name",
               "ignoreCase":true
           }
       ]
   }
}

因此,您可以使用它來獲取輸入到“自動完成”框中的值,方法是:

$(".autocomplete").kendoAutoComplete({
   dataTextField: "Name",
   dataSource: {
       serverFiltering: true,
       type: "json",
       transport: {
           read: {
               url: "/search/aspect"
           },
           parameterMap: function (data, action) {
               if(action === "read") {
                   return {
                       term: data.filter.filters[0].value
                   };
               } else {
                   return data;
               }
           }
       }
   }
});

引用自:https://stackoverflow.com/questions/18925779