2016-06-22 3 views
0

Я получаю около 6000 записей, которые мне нужно привязать к combobox. Я занимаюсь фильтрацией сервера, когда пользователь вводит не менее двух символов. Он работает отлично в первый раз, но когда я очищаю combobox, моя страница зависает.Kendo UI combobox зависает при фильтрации сервера

Ниже приведено описание того, как я начал свою сборку.

$("#myList").kendoComboBox({ 
     filter: "startswith", 
     dataTextField: "xName", 
     dataValueField: "xId", 
     template: '<span>#:xName# (#:gName#-#:gmName#)</span>', 
     dataSource: viewModel.get("mydataList"), 
     height: 400, 
     autoBind: false, 
     minLength: 2, 
    }).data("kendoComboBox"); 

Ниже, как я указан источник данных:

mydataList= new kendo.data.DataSource({ 
     transport: { 
      read: { 
       dataType: "json", 
      }, 
      parameterMap: function (options, operation) { 
       if (operation !== "read" && options.models) { 
        return { 
         models: kendo.stringify(options.models) 
        }; 
       } 
      } 
     }, 
     serverFiltering: true 
    } 
    ); 

Также предложите, если я могу скрыть стрелку раскрывающегося списка.

+0

Почему вы определяете источник данных такой? Просто используйте синтаксис бритвы. Кроме того, опубликуйте действие контроллера, в котором вы выполняете фильтрацию. – ataravati

+0

У меня нет другого конкретного кода для фильтрации. этот код сам делает это. Поэтому, если я набираю «AS», он вытаскивает все данные, обозначающие «AS», но если это «AS», он зависает. Кажется, тогда контроль пытается связать со всеми записями. – Piyush

+0

Где в этом коде выполняется фильтрация? Кроме того, как это может быть фильтрация сервера без какого-либо кода сервера (действия контроллера), чтобы сделать это? – ataravati

ответ

0

Что вы делаете, это не серверная фильтрация. Просто потому, что вы установили serverFiltering: true, это не значит, что вы выполняете фильтрацию сервера. Этот параметр предназначен только для того, чтобы сообщить источнику данных, что вы используете фильтрацию сервера, но вам необходимо его реализовать. У вас 6000 записей, которых много, и поэтому ваш комбо-ящик замерзает. Кроме того, вы используете asp.net MVC, и вопрос помечен с помощью MVC Kendo asp.net, поэтому вы должны использовать синтаксис Razor. Вот как это сделать.

Ваш ComboBox:

@(Html.Kendo().ComboBox() 
     .Name("myList") 
     .DataTextField("xName") 
     .DataValueField("xId") 
     .Template("<span>#:xName# (#:gName#-#:gmName#)</span>") 
     .Filter("startswith") 
     .AutoBind(false) 
     .Height(400) 
     .MinLength(2) 
     .DataSource(source => { 
      source.Read(read => 
      { 
       read.Action("GetMyList", "MyController"); 
      }) 
      .ServerFiltering(true); 
     }) 
) 

Тогда в контроллере (MyConteroller в моем примере), вы будете иметь действие, которое возвращает отфильтрованный список:

public JsonResult GetMyList(string text) { 
    // Here you put the logic to filter the data you had in myDataList in your question 
}