2016-06-22 11 views
0

Ich bekomme rund 6000 Datensätze, die ich an Combobox binden muss. Ich mache Server-Filterung darauf, wenn Benutzer mindestens 2 Zeichen eingeben. Es funktioniert zum ersten Mal gut, aber wenn ich die Combobox lösche, friert meine Seite ein.Kendo UI Combobox friert beim Serverfiltern ein

Unten ist, wie ich meine Combobox initiiert.

$("#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"); 

Unten ist, wie ich die Datenquelle angegeben haben:

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 
    } 
    ); 

Bitte auch vorschlagen, wenn ich den Dropdown-Pfeil verstecken.

+0

Warum haben Sie definieren Ihr Datenquelle so? Benutze einfach die Rasierersyntax. Veröffentlichen Sie auch die Controller-Aktion, in der Sie filtern. – ataravati

+0

Ich habe keinen anderen spezifischen Code zum Filtern. Dieser Code selbst macht das. Also, wenn ich "AS" tippe, zieht es alle Daten an, die mit "AS" angeben, aber wenn "AS" gelöscht wird, friert es ein. Es scheint dann das Steuerelement versucht, mit allen Datensätzen zu binden. – Piyush

+0

Wo in diesem Code ist die Filterung erfolgt? Wie kann es eine Serverfilterung ohne irgendeinen Servercode (Controller-Aktion) sein? – ataravati

Antwort

0

Was Sie tun, ist nicht Server-Filterung. Nur weil Sie serverFiltering: true eingestellt haben, bedeutet das nicht, dass Sie Serverfilterung durchführen. Diese Einstellung dient nur dazu, der Datenquelle mitzuteilen, dass Sie die Serverfilterung verwenden, aber Sie müssen sie tatsächlich implementieren. Sie haben 6000 Datensätze, was eine Menge ist, und deshalb friert Ihre Combo-Box ein. Außerdem verwenden Sie asp.net MVC, und die Frage ist mit Kendo asp.net MVC markiert, so dass Sie die Razor-Syntax verwenden sollten. Hier ist, wie es geht.

Ihre 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); 
     }) 
) 

Dann in Ihrem Controller (MyConteroller in meinem Beispiel), werden Sie eine Aktion, die die gefilterte Liste zurückgibt:

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