keyup事件称为数据库函数并填充列表框

时间:2012-06-21 10:29:54

标签: c# javascript jquery asp.net .net

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

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

新编辑:

基本上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事件并使用按钮事件,这会使它成为更好的场景吗?

2 个答案:

答案 0 :(得分:2)

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

  1. 可以有多少个条目?你可以将它们加载到JS数组中,并在JS中搜索它们吗?可能不是,否则你不需要做这个过程。

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

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

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

    根据更多细节编辑。

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

    你应该启动ajax查询以第一次获取所有引用,并且在返回之前不对条目执行任何其他操作。

    您可能还希望将整个列表加载到应用程序加载的内存中,并在需要时获取其中的一部分。可能每个初始角色需要一个26个条目,但这个大小可能是OTT。它可能取决于您从db调用和选择中获得的性能。

    这非常复杂,但应该为您提供一个满足您需要的响应者界面。

答案 1 :(得分: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