搜索建議(Searching Suggestion),已佈置好樣式

大家應該都看到過 GOOGLE 的搜索建議,就是當我們在輸入關鍵詞時,GOOGLE 會根據我們目前已輸入的字顯示相關的關鍵字建議,這就是搜索建議,現在很多網站都實現該友好的功能,如 YAHOO、狗狗搜索等。

實現該功能的思路就是:
在關鍵字輸入框裏,當用戶按鍵彈起時,發送輸入框裏的字符串到服務器。
服務器根據收到客戶端發來的字進入匹配搜索
將匹配用戶已輸入字的記錄回發到客戶端
客戶端收到服務端的響應,輸出建議。

其實就是異步回發(AJAX)。

下面是一個實例,實例實現的是搜索 SQL Server 默認數據庫 Northwind 表 Customers 字段 CustomerID,當用戶要輸入框輸入字時,返回該字段值與用戶輸入的字開頭匹配的記錄,即 CustomerID LIKE '用戶已輸入的字%'。

樣式已設置好,顯示建議的行爲絕對位置,所以該行不會顯示網頁上的內容。

 

文件名:WordSuggest.aspx

源碼如下:

.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="WordSuggest.aspx.cs" Inherits="WordSuggest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>

<html xmlns="http://www.w3.org/1999/xhtml"; >
<head runat="server">
    <title>無標題頁</title>
    <style type="text/css">
    .CInput{border:solid 1px gray;width:300px}
    #divSuggestions{border:solid 1px gray;width:300px;background:#fff;visibility:hidden}
    #divSuggestions span{display:block;padding:3px}
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <h1>搜索建議 DEMO</h1>
    <span>http://www.code-studio.net </span>
    <hr />
    <table style="border-collapse:collapse;"><tr><td><asp:TextBox ID="txtInput" runat="server" CssClass="CInput" onkeyup="sendRqt(this)"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" Text="Submit" /></td></tr>
    <tr style="position:absolute;"><td><div id="divSuggestions"></div></td></tr></table>
    </div>
    </form>
    <script type="text/javascript">
    var xhr;
    var isIe=window.navigator.appName.indexOf("Netscape") == -1?true:false;

    function $(sElmId){return document.getElementById(sElmId);}
    function crtRqt(){
        if(window.ActiveXobject)
            xhr=new ActiveXObject("Microsoft.XMLHTTP");
        else xhr=new XMLHttpRequest();
    }
    function sendRqt(srcElm){
        var sInput=srcElm.value;
        if(sInput!=""){
            var url="wordsuggest.aspx?t="+new Date().getTime()+"&w="+sInput;
            crtRqt();
            xhr.onreadystatechange=hdlRsp;
            xhr.open("GET",url,true);
            xhr.send(null);
        }
        else $("divSuggestions").style.visibility="hidden";
    }
    function hdlRsp(){
        if(xhr.readyState==4&&xhr.status==200){
            var rspText=xhr.responseText;
            var oDiv=$("divSuggestions");
            if(rspText!=""){
                var arrRspText=xhr.responseText.split(',');
                var sInnerHtml="";
                for(var i=0;i<arrRspText.length;++i){
                    sInnerHtml+="<span onmouseover='setStyle(this,true)' onmouseout='setStyle(this,false)'"
                                +" onclick='setInput(this)'>"+arrRspText[i]+"</span>";
                }
                oDiv.innerHTML=sInnerHtml;
                oDiv.style.visibility="visible";
            }
            else oDiv.style.visibility="hidden";
        }
    }
    function setStyle(srcElm,bOver){
        srcElm.style.background=bOver?"orange":"";
    }
    function setInput(srcElm){
        $("<%=txtInput.ClientID %>").value=srcElm.innerHTML;
    }
    </script>
</body>
</html>

 

 

.CS
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class WordSuggest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string strInput = string.IsNullOrEmpty(Request.QueryString["w"]) ? string.Empty : Request.QueryString["w"];
        if (strInput.Trim().Length != 0)
        {
            Suggeste(strInput);
        }
    }

    private void Suggeste(string originalStr)
    {
     /* 搜索建議
      * 文件名: WordSuggest.aspx
      * 功能描述: 根據用戶輸入,在數據庫 Northwind 的表 Customers 查找 CustomerID 字段值匹配的記錄.
      */
        SqlConnection conn = new SqlConnection("data source=localhost;database=northwind;user id=sa;password=你的密碼");
        string cmdText = "SELECT TOP 10 CustomerID FROM Customers WHERE CustomerID LIKE @w";
        SqlParameter para = new SqlParameter("@w", string.Format("{0}%", originalStr));
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = cmdText;
        cmd.Parameters.Add(para);
        conn.Open();
        SqlDataReader reader = cmd.ExecuteReader();
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        while (reader.Read())
        {
            sb.AppendFormat("{0},", reader[0]);
        }
        reader.Close();
        conn.Close();
        Response.ContentType = "text/plain";
        Response.Clear();
        if (sb.Length != 0)
        {
            Response.Write(sb.ToString().Remove(sb.Length - 1));
        }
        else
        {
            Response.Write(string.Empty);
        }
        Response.Flush();
        Response.Close();
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章