2016-06-22 1 views
0

コンボボックスにバインドする必要があるレコードが6000ほどもあります。ユーザーが少なくとも2文字を入力すると、サーバーのフィルター処理が実行されています。最初はうまく動作しますが、コンボボックスをクリアするとページがフリーズします。剣道のUIコンボボックスがサーバーのフィルタリングを行うときにフリーズする

以下は、私のコンボボックスの開始方法です。以下は

$("#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を使用しています。質問にはKendo asp.net MVCというタグが付いていますので、Razor構文を使用してください。それを行う方法は次のとおりです。

あなたのコンボボックス:

@(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 
} 
関連する問題