jQuery Автозаполнение и ASP.NET

Я искал по всему этому сайту и в Интернете для хорошего ипросто Пример автозаполнения с использованием jQuery и ASP.NET. Я хотел предоставить данные, используемые автозаполнением, с помощью веб-сервиса (и, вероятно, сделаю это позже). В то же время, я получил это работает, но это кажется немного хакерским ...

На моей странице есть текстовое поле:

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

Вот где это начинает становиться хакерским ... Я называю страницу вместо веб-сервиса:

  <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&timestamp=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», а также «March» и "Мега." Я просто хотел, чтобы это началось с матча.

Во всяком случае, это работает, и его довольно легко настроить, но есть ли лучший способ?

Ответы на вопрос(4)

Ваш ответ на вопрос