ajax AutoCompleteExtender发生了什么?

时间:2016-01-08 19:36:46

标签: asp.net ajax

这真的很奇怪。我正在尝试使用数据库实现AutoCompleteExtender。我输入第一个字符,让我们在文本框中输入'T',下拉结果面板显示所有页面的源代码(客户端而不是服务器端),每行一个字符,如图中所示。

AutoComplete Results Screenshot

顺便提一下,谷歌Chrome会立即显示这一点,而IE很好地考虑它,说localhost没有响应,因为它运行的是一个很长的脚本。

如果我然后选择其中任何一个字符,那么它会显示以“T”开头的正确结果,但是会替换我输入的字符。

我从codeproject.com上的教程中提取代码,除了更改文本框ID和一些ADO,因此它指向我的数据库,它是相同的。 我会包含代码。出了什么问题?

现在由于某种原因,它不会让我发布代码,无论我如何格式化,但这是我使用的。 AutoComplete With DataBase and AjaxControlToolkit

1 个答案:

答案 0 :(得分:0)

如果没有看到代码就很难给出答案......试试这个

<asp:TextBox ID="txtSearchKey" runat="server" Width="350" AutoPostBack="true" OnTextChanged="txtSearchKey_TextChanged" />
<asp:TextBoxWatermarkExtender ID="weSearchKey" runat="server" Enabled="True" TargetControlID="txtSearchKey" WatermarkText="Search by Name" WatermarkCssClass="watermark" />
<asp:AutoCompleteExtender ServiceMethod="YourWebMethod" MinimumPrefixLength="3" CompletionInterval="100" EnableCaching="false" CompletionSetCount="10" TargetControlID="txtSearchKey" ID="searchExtender" runat="server" FirstRowSelected="false" OnClientItemSelected="GetSelectedId" CompletionListCssClass="completionList" CompletionListItemCssClass="listItem" CompletionListHighlightedItemCssClass="itemHighlighted" CompletionListElementID="divCompletionListElement" />
<input type="hidden" id="hdnSelectedId" name="hdnSelectedId" value="" />

使用javascript方法确保捕获所选项目

function GetSelectedId(source, eventArgs) {
    var selectedId = eventArgs.get_value();
    var e = document.getElementById('hdnSelectedId');
    if (e) {
        e.value = selectedId;
    }
}

在AutoCompleteExtender的ServiceMethod属性中配置的后端代码中创建WebMethod

    [ScriptMethod()]
    [WebMethod]
    public static List<string> YourWebMethod(string prefixText, int count)
    {

        var totalRecords = 0;
        var searchResults = <<get your results here into a list or whatever container>>
        //I used DataTable as a container here for searchResults
        if (searchResults.Rows.Count == 0)
            return new List<string>() { "No result found" };

        //Create a List from your search results and return it
        List<string> items = new List<string>();
        foreach (DataRow searchResult in searchResults.Rows)
            items.Add(AutoCompleteExtender.CreateAutoCompleteItem(searchResult["Name"].ToString(), searchResult["BuilderID"].ToString());

        return items;
    }