Я просмотрел весь этот сайт и веб-сайт для хорошего и простого примера автозаполнения с использованием jQuery и ASP.NET. Я хотел бы разоблачить данные, используемые автозаполнением, с помощью webservice (и, вероятно, это сделает следующий). В то же время, я получил эту работу, но она кажется немного взломанной...
На моей странице у меня есть текстовое поле:
<input id="txtSearch" type="text" />
Я использую автозаполнение jQuery, настроенное по их примеру:
<link rel="stylesheet" href="js/jquery.autocomplete.css" type="text/css" />
<script type="text/javascript" src="js/jquery.bgiframe.js"></script>
<script type="text/javascript" src="js/jquery.dimensions.pack.js"></script>
<script type="text/javascript" src="js/jquery.autocomplete.js"></script>
Вот где он начинает хакать... Я вызываю страницу вместо webservice:
<script type="text/javascript">
$(document).ready(function(){
$("#txtSearch").autocomplete('autocompletetagdata.aspx');
});
</script>
На странице я удалил ВСЕ html и просто получил это (в противном случае в раскрывающемся списке автозаполнения отображаются различные биты HTML):
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="autocompletetagdata.aspx.cs" Inherits="autocompletetagdata" %>
И в моем autocompletetagdata.aspx я использую SubSonic для запроса, форматирования и возврата данных из базы данных (по одному элементу данных в строке):
protected void Page_Load(object sender, EventArgs e)
{
// Note the query strings passed by jquery autocomplete:
//QueryString: {q=a&limit=150×tamp=1227198175320}
LookupTagCollection tags = Select.AllColumnsFrom<LookupTag>()
.Top(Request.QueryString["limit"])
.Where(LookupTag.Columns.TagDescription).Like(Request.QueryString["q"] + "%")
.OrderAsc(LookupTag.Columns.TagDescription)
.ExecuteAsCollection<LookupTagCollection>();
StringBuilder sb = new StringBuilder();
foreach (LookupTag tag in tags)
{
sb.Append(tag.TagDescription).Append("\n");
}
Response.Write(sb.ToString());
}
Если вы не делаете запрос LIKE, он возвращает все, что содержит совпадение для символов (ов), которые вы вводите, например, ввод "a" будет включать в себя "Ask" и "Answer", а также "Март" и "Мега". Я просто хотел, чтобы он начинал с матча.
В любом случае, он работает, и его довольно легко настроить, но есть ли лучший способ?