这真的很奇怪。我正在尝试使用数据库实现AutoCompleteExtender。我输入第一个字符,让我们在文本框中输入'T',下拉结果面板显示所有页面的源代码(客户端而不是服务器端),每行一个字符,如图中所示。
AutoComplete Results Screenshot
顺便提一下,谷歌Chrome会立即显示这一点,而IE很好地考虑它,说localhost没有响应,因为它运行的是一个很长的脚本。
如果我然后选择其中任何一个字符,那么它会显示以“T”开头的正确结果,但是会替换我输入的字符。
我从codeproject.com上的教程中提取代码,除了更改文本框ID和一些ADO,因此它指向我的数据库,它是相同的。 我会包含代码。出了什么问题?
现在由于某种原因,它不会让我发布代码,无论我如何格式化,但这是我使用的。 AutoComplete With DataBase and AjaxControlToolkit
答案 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;
}