2012-03-25 53 views

回答

0

從概念上講,這是可能的,但jQuery不能直接命中SQL DB。因此,'%$q%'中的美元符號對我來說毫無意義。此外,由於您可能會查找以用戶輸入的任何內容開始的單詞,因此您的LIKE表達式應該只在末尾有'%',而不是開頭的'%'。

0

如果您嘗試僅綁定到文本框並在其值發生更改時顯示自動完成,則應執行以下操作。

//Javascript 
$("#txtSearchValue").autocomplete({ 
    source: function (request, response) { 
     var regex = RegExp('[^a-z0-9\\&\\s]', 'gi'); 
     var obj = { 
      searchValue: request.term.replace(regex, '') 
     }; 

     $.ajax({ 
      type: "POST" 
      , contentType: "application/json; charset=utf-8" 
      , url: "AutoComplete.asmx/QueryList" 
      , data: JSON.stringify(obj) 
      , dataType: "json" 
      , async: true 
      , success: function (data) { 
       response(data.d); 
      } 
      , error: function (request, status, error) { 
       var err = jQuery.parseJSON(request.responseText); 
       alert(err.Message); 
      } 
     }); 
    } 
    , minLength: 2 
}); 


//Auto-Complete on the server (code using C#) 
[WebMethod] 
[System.Web.Script.Services.ScriptMethod] 
public string[] QueryList(string searchValue) 
{ 
    string sqlSelect = @"select column_name 
         from table 
         where column_name like '%' + @target + '%'"; 
    using(SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["connString"].ConnectionString)) 
    { 
     using(SqlDataAdapter da = new SqlDataAdapter(sqlSelect, conn)) 
     { 
      da.SelectCommand.Parameters.AddWithValue("@target", searchValue); 
      DataTable dt = new DataTable(); 
      conn.Open(); 
      da.Fill(dt); 

      string[] results = new string[dt.Rows.Count]; 
      for (int i=0; i<results.Length; i++) 
      { 
       results[i] = dt.Rows[i]["column_name"].ToString(); 
      } 

      return results; 
     } 
    } 
}