1

ASP.NET に、次のコードDefault.aspxを含む Web ページがあります。

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="../Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
    <script src="SearchHandler.js" type="text/javascript"></script>
</head>
<body>
    <form id="form1" runat="server"> 
        <asp:TextBox ID="search" runat="server"></asp:TextBox>
        <asp:ListBox ID="listbox" runat="server" SelectionMode="Multiple"></asp:ListBox>
    </form>
</body>
</html>

私のSearchHandler.jsには、次のコードがあります。

$(document).ready(function () {
    $('#search').keyup(function () {
        //..do something here and populate listbox from database query result.
        //..call C# function GetItems(), passing input as parameter and use to populate ListBox.
    });
});

Functions.csで:

public class Functions
{
   Database db = new Database();   
   public List<string> GetItems(string searchinput) 
   {
      List<string> items = db.DoSomething(searchinput);
      return items;
   }
}

申し訳ありませんが、私はこれにかなり慣れていませんが、上記のコードを完成させて同じページのリストボックスにデータを入力するにはどうすればよいですか? 基本的に、リストボックスの内容は、ユーザーがテキストボックスで「キーア​​ップ」するたびに更新されます。Functions.csクラス ファイルGetItems()からC# 関数を呼び出したいと思います。

新しい編集:

基本的GetItems()にキー入力を受け取り、キーが押されるたびにデータベースクエリを起動して関連するレコードを取得します。以下のようなテーブルがあります(例):

TableA
Name       Country
Tom        England
Bill       USA
John       Australia
Jim        China
Harry      Belgium
Johnathan  France

したがって、誰かが検索ボックスに「ジョン」と入力すると、「オーストラリア」と「フランス」がリストボックスに表示されます。

SELECT Country FROM TableA WHERE Name LIKE '%John%'

編集 21/06/12: KeyUp イベントを使用せず、代わりにボタン イベントを使用した場合、これはより良いシナリオになりますか?

4

2 に答える 2

2

ここでの私の最初の応答は、このようにしないでください。誰かがリストに文字を入力するたびに DB 呼び出しを行うと、DB アクセスに非常にコストがかかり、パフォーマンスがひどく低下します。ajax 呼び出しを使用したとしても、有効な時間内に応答を返す方法はありません。だから私はあなたにいくつかの幅広い提案をします:

  1. エントリはいくつありますか? それらを JS 配列にロードして、JS 内で検索していただけますか? そうでなければ、このプロセスを実行する必要はありません。

  2. 一度DBからリストを取得し、シリアル化されたオブジェクトとして保存します。次に、このオブジェクトで関連するオプションを検索します。サイトの初期化でこのデータをロードします。

  3. 文字を入力したら (データによっては 2 文字かもしれません)、ajax 呼び出しを実行して、関連するオプションのリスト全体を取得します。そこから、JS でこのリストを使用して、さらなる入力に基づいて制限します。

うまく機能するまでこれを微調整します。必要に応じて、この特定の部分について詳細を説明できます。

詳細に基づいて編集します。

最初にキーを押したときに、この 1 文字に関連するすべてのエントリをロードすることをお勧めします。そこから、ロードされたリストを検索して一致するものを探し、そこから絞り込みます。

最初にすべての参照を取得するために ajax クエリを開始し、これが戻るまでエントリに対して他に何もする必要はありません。

アプリの読み込み時にリスト全体をメモリに読み込み、必要に応じてそのサブセットを取得することもできます。おそらく、最初の文字ごとに 1 つずつ 26 のエントリを取りますが、それはおそらくこのサイズの OTT です。データベース呼び出しと選択から得られるパフォーマンスに依存する場合があります。

これは非常に複雑ですが、必要なことを行うレスポンデント インターフェイスを作成する必要があります。

于 2012-06-21T10:44:23.127 に答える
0

よくわかりませんが、次のようなものを探しているかもしれませんhttp://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/AutoComplete/AutoComplete.aspx

編集:あなたの質問を読み違えても構いませんが、ajaxライブラリを調べて、適切なものやニーズに適応できるものを見つけることができるかどうかを確認します。幸運を。

編集: リストを updatepanel で囲むと、そのイベントでリストを更新できます。 http://weblogs.asp.net/jeffreyzhao/archive/2008/04/26/refresh-the-updatepanel-using-javascript-code.aspx

于 2012-06-21T15:52:25.117 に答える