【发布时间】:2010-09-23 06:56:17
【问题描述】:
我在整个网站和网络上搜索了一个使用 jQuery 和 ASP.NET 的良好且简单的自动完成示例。我想通过 web 服务公开自动完成使用的数据(接下来可能会这样做)。与此同时,我得到了这个工作,但它似乎有点 hacky...
在我的页面中,我有一个文本框:
<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×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”以及“三月”和“超级”。我只是想让它从匹配开始。
无论如何,它可以工作,而且设置起来很容易,但是有没有更好的方法?
【问题讨论】:
-
感谢 djuth,这很好用而且非常简单!我不得不承认这是相当有限的,例如,我希望它自动完成一个员工姓名,然后返回一个员工ID,但我可能可以玩弄添加和解析的内容。
-
现在已弃用并与 JQuery UI 集成 - learningjquery.com/2010/06/autocomplete-migration-guide 显示了如何迁移,而不是太多!
标签: asp.net jquery subsonic autocomplete