人家是php做的,你既然是.net平台下,你用Lucene.Net用这个开源项目就最好了。
下拉框 你要确定 索引的查询数量范围。你看百度智能感知 也不是加载所有的。一般给 10~15条就够了。JSON 传输数据异步请求 是没错的。JQUERY有这样的插件 你可以选择。框架方面 建议用 MVC 直接可以通过路由机制 映射到 CLASS 类中了.
在客户端给用户的提示数量不应过多。无论哪种格式的数据,也无论哪种算法,差异基本上是没有的。至少感觉不出来的。
这个呀,简单的,就用SQL语句吧,在SQL SERVER 中查询,然后利用repeat 展现出来,
关注。。。
在.net C#下
要用到jquery的autocomplete(自动完成,网上有的),C#的一般处理程序ashx文件(特点:添加新的ashx,不能复制原来的ashx文件,一定要重新新建一个ashx文件,用来处理数据的。)
aspx 文件主要代码
//导入jquery autocomplete
<script src="../js/jquery.ui.autocomplete.js" type="text/javascript"></script>
//导入jquery autocomplete 样式
<link href="../css/jquery.autocomplete.css" rel="stylesheet" type="text/css" />
//js代码
<script type="text/javascript">
//页面上的txtKeyWords文本框
var txtKeyWords = "#<%=txtKeyWords.ClientID %>";
function findValue(li) {
if (li == null) return alert("No match!");
if (!!li.extra)
var sValue = unescape(li.extra[0]);
}
function selectItem(li) {
findValue(li);
}
$(document).ready(function() {
//SearchKey.ashx是你创建的C#一般处理程序文件
$(txtKeyWords).autocomplete("SearchKey.ashx",
{
delay: 5,
//最小的输入字符数,就是输入2个长度的字符就会提示
minChars: 2,
matchSubset: 1,
cacheLength: 1,
onItemSelect: selectItem,
onFindValue: findValue,
autoFill: true,
//文本下面的最大显示记录数
maxItemsToShow: 20,
select: function(event, ui) {
value = ui.item.value;
value = getAvailableValue(value);
return false;
}
}
);
});
</script>
<asp:TextBox runat="server" Width="300px" Css ToolTip="input search key words here" />
ashx文件主要代码(友情提示:注意用一个ashx文件就新建一个,我吃过亏)
public class SearchKey : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
if (context.Request.QueryString["q"] != null)
{
string key = context.Request.QueryString["q"];
context.Response.Write(GetCorporationList(key));
}
}
public string GetCorporationList(string key)
{
//一般都是取出你的数据库中的数据,比方说要查找类似的数据库工厂表的名称
sql语句是select FactoryEnName from Factoryinfo where FactoryEnName like @key
SqlParameter[] pars = new SqlParameter[] {
new SqlParameter("@key", "%"+key+"%")
};(很基础)
DataTable dt = FactoryManager.GetFactoryList(key);
string result = "";
if (dt.Rows.Count > 0)
{
StringBuilder items = new StringBuilder();
foreach (DataRow dr in dt.Rows)
{
//取得类似工厂名
items.Append(dr["FactoryEnName"].ToString() + "\n");
}
result = items.ToString();
}
return result;
}
public bool IsReusable
{
get
{
return false;
}
}
}
希望能帮到你。分享快乐,希望能给国家的IT做点贡献!