1

我在 ASP.NET 中有一个网页,其中包含以下代码Default.aspx

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

抱歉,我对此很陌生,但是我将如何完成上面的代码以填充同一页面上的列表框?基本上,每次用户在文本框中“按键”时,列表框的内容都会刷新。我想GetItems()Functions.cs类文件中调用一个 C# 函数。

新编辑:

基本上GetItems()需要一个键输入,每次按下一个键,它都会触发一个数据库查询来检索相关记录。我有一个如下表(例如):

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

因此,当有人在搜索框中输入“John”时,“Australia”和“France”将出现在列表框中。

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

编辑 21/06/12:如果我不使用 KeyUp 事件而是使用按钮事件,这会使其成为更好的方案吗?

4

2 回答 2

2

我在这里的第一反应是不要这样做。每次有人在列表中输入字母时进行数据库调用对于您的数据库访问来说非常昂贵,并且会使您的性能下降一些可怕的东西。即使您使用 ajax 调用 - 您也无法在有效的时间内获得响应。所以我会给你一些广泛的建议:

  1. 可以有多少条目?你能把它们加载到 JS 数组中,然后在 JS 中搜索它们吗?可能不会,否则您不需要执行此过程。

  2. 一次从数据库中获取列表,并将其存储为序列化对象。然后在此对象中搜索相关选项。在站点初始化中加载此数据。

  3. 一旦您输入了一个字符 - 或者可能是 2 个,具体取决于您的数据 - 执行 ajax 调用以获取完整的相关选项列表。从那里开始,在 JS 中使用这个列表来根据进一步的输入进行限制。

调整它直到它运作良好。如果需要,我可以提供有关任何特定部分的更多详细信息。

编辑基于更多细节。

我建议在第一次按键时,加载与该单个字符相关的所有条目。从那里开始,您在加载的列表中搜索匹配项,从那里缩小范围。

您应该启动一个 ajax 查询以第一次获取所有引用,并且在返回之前对条目不做任何其他事情。

您可能还希望在应用程序加载时将整个列表加载到内存中,并在需要时获取其中的一个子集。可能,为每个初始字符取 26 个条目,但这可能是这种大小的 OTT。这可能取决于您从数据库调用和选择中获得的性能。

这非常复杂,但应该会为您生成一个满足您需要的响应接口。

于 2012-06-21T10:44:23.127 回答
0

不太确定,但您可能正在寻找类似http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/AutoComplete/AutoComplete.aspx

编辑:没关系,我误读了您的问题,但是我会环顾 ajax 库,看看您是否可以找到合适的东西或可以适应您需要的东西。祝你好运。

编辑:如果您将列表包含在更新面板中,您可以在该事件中刷新它。 http://weblogs.asp.net/jeffreyzhao/archive/2008/04/26/refresh-the-updatepanel-using-javascript-code.aspx

于 2012-06-21T15:52:25.117 回答