2017-07-14 14 views
0

私は、TextBoxにオートコンプリートを追加したいASP.NET 4.5 WebFormアプリケーションを持っています。 jquery-uiを調べていましたが、動作させることができません。ASP.NET JQuery-UIオートコンプリートが動作しない

私はjquery 3.1.1とjquery-ui 1.12.1を使用しています。ここで私のaspxページの頭の部分です。ここで

<asp:TextBox ID="SearchDynamicTxt" runat="server" OnTextChanged="SearchDynamicTxt_TextChanged" AutoPostBack="true" ></asp:TextBox> 

が背後にあるコードである:ここで
ASPX 

<head runat="server">  
<link href="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css" rel="stylesheet" type="text/css" /> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> 

    <script type="text/javascript"> 
     $(document).ready(function() { 
      $("#SearchDynamicTxt").autocomplete({ 
       source: function (request, response) { 
        $.ajax({ 
         type: "POST", 
         contentType: "application/json; charset=utf-8", 
         url: "UserReports.aspx/GetUsers", 
         data: "{'term':'" + $("#SearchDynamicTxt").val() + "'}", 
         dataType: "json", 
         success: function (data) { 
          response(data.d); 
         }, 
         error: function (result) { 
          alert("Error"); 
         } 
        }); 
       } 
      }); 
     }); 
    </script> 
</head> 

は、テキストコントロールである私は、私が忘れてしまったか、スペルが間違って何かがあると確信している

[WebMethod] 
     public static string[] GetUsers(string term) 
     { 
      List<string> usersList= new List<string>(); 
      string CS= ConfigurationManager.ConnectionStrings["UsersCS"].ConnectionString; 
      using (SqlConnection con = new SqlConnection(CS)) 
      { 
       con.Open(); 
       SqlCommand cmd = new SqlCommand("SELECT Name FROM Customers WHERE Name Like '" + term + "%'", con); 
       SqlDataReader reader = cmd.ExecuteReader(); 
       while(reader.Read()) 
       { 
        usersList.Add(reader[0].ToString()); 
       } 
      } 
      return usersList.ToArray(); 
     } 

が、私にはありません何をどこで知っているか私がコントロールに何かを書き込もうとすると、何も起こりません。一致する可能性のあるユーザーのリストを表示し、そのうちの1つを選択すると、OnTextChangedメソッドを呼び出すことができます。

UPDATE!

これでドロップダウンリストが表示されたので、ユーザーとその選択を選択してOnChangedメソッドをトリガーします。現在、これは起こっていません。 Enterキーを押すか、ページのどこかをクリックしてポストバックを生成し、OnChangedテキストを検出する必要があります。私はこれを変更する必要があると推測しています:

success: function (data) 
{ 
    response(data.d); 
}, 

恐らくイベントパラメータなどを追加していますか?私は現在解決策を探していますが、見つけられるまで誰かが答えを知っていれば、それを共有してください。

ありがとうございました!

+0

これらが必要ですか?OnTextChanged = "SearchDynamicTxt_TextChanged" AutoPostBack =テキストボックスに "true"? –

答えて

0

どのように)私が何かを修正し、失敗する2日間の闘争が、stackoverflowの上で掲示​​した後、私は5分で答えを見つける:)ということです

の問題は、私はテキストボックスにアクセスしようとしていたということでした$( "#SearchDynamicTxt")、テキストボックスはLoginView内にあります。

だから私はとそれを変更:今、それは完璧に動作

$("#<%=LoginView1.FindControl("SearchDynamicTxt").ClientID %>") 

UPDATE 2の回答も見つかりました。これは私がしたように立ち往生している人を助け

select: function (event, ui) 
{ 
    $("#<%=LoginView1.FindControl("SearchDynamicTxt").ClientID %>").trigger("change"); 
} 

希望: は、私は、次のオートコンプリート(ないアヤックス)に書き込むために必要判明します。ここ

+0

コントロールで 'ClientIDMode =" Static "を使用して、ASP.netがIDを変更しないようにすることもできます。 – SeanKendle

0
data: "{'term':'" + $("#SearchDynamicTxt").val() + "'}", 

jqueryのは、あなたが

$('#<%=SearchDynamicTxt.ClientID %>').val() 

その作業

+0

テキストボックスがLoginView内にあるので、私の場合は機能しません。SearchDynamicTxt.ClientIDを使用すると、現在のコンテキストに存在しないと言われます。 LoginViewを追加して、その中にテキストボックスを入れて、私が何を意味するのか見てみましょう。 – Cosmos24Magic

0

はこれを試してみてください、次の適用する必要があるので、直接asp.net要素を見つけることができませんので、問題がある:

data: "{'term':'" + request.term + "'}", 
関連する問題