2013-10-28 8 views
6

Mam autozkładanie extender na polu tekstowym, który pokazuje rekordy jako listę z bazy danych, ale wern I kliknij na texbox i zacznij pisać nic nie dzieje. mój kod HTML jestPrzedłużacz autouzupełniania ajax nie działa

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
    <asp:AutoCompleteExtender ID="TextBox1_AutoCompleteExtender" runat="server" 
     Enabled="True" TargetControlID="TextBox1" ServicePath="~/WebService.asmx" 
       ServiceMethod="GetCompletionList" 
       MinimumPrefixLength="2" 
       CompletionInterval="1000" 
       EnableCaching="true" 
       CompletionSetCount="20" 
       DelimiterCharacters=";, :" 
       ShowOnlyCurrentWordInCompletionListItem="true" > 
    </asp:AutoCompleteExtender> 

A mój serwis internetowy jest

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.Services; 
    using System.Data; 
    using MySql.Data.MySqlClient; 
    using System.Configuration; 

    /// <summary> 
    /// Summary description for WebService 
    /// </summary> 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService] 
    public class WebService : System.Web.Services.WebService { 

    public WebService() { 

     //Uncomment the following line if using designed components 
     //InitializeComponent(); 
    } 

    [WebMethod] 
    public static List<string> GetCompletionList(string prefixText, int count) 
    { 
     MySqlConnection con = new MySqlConnection(ConfigurationManager.AppSettings["cn"]); 
     if (con.State == ConnectionState.Closed) 
      con.Open(); 
     MySqlCommand cmd = new MySqlCommand("SELECT gotra FROM tbgotra WHERE gotra LIKE '%" + prefixText + "%'",con); 
     List<string> k = new List<string>(); 
     using (MySqlDataReader sdr = cmd.ExecuteReader()) 
     { 
      while (sdr.Read()) 
      { 
       k.Add(sdr["gotra"].ToString()); 
      } 
     } 
     con.Close(); 
     return k; 
    } 
    } 
+0

Czy umieścisz również kod database.asmx? –

+0

Wywołuję listę obiektów z bazy danych według mojej metody serwisowej. który jest podany powyżej. –

+0

Niestety, mam na myśli plik Webservice.asmx, ale chcę się upewnić, że jest poprawny. –

Odpowiedz

4

Spróbuj dodać ten wiersz, pamiętam miałem ten sam problem raz, gdzie pracował dla mnie lokalnie, ale nie żyć.

[WebMethod] 
[System.Web.Script.Services.ScriptMethod] <-- Add this line 
public static List<string> GetCompletionList(string prefixText, int count) 
.... 
+0

dzięki za odpowiadanie na kay, ale nie działa w moim przypadku. –

+0

Czy masz jakieś błędy w obsłudze? Czy wiesz, że funkcja jest aktualnie uruchamiana? Spróbuj po prostu dodać linię kodu, aby utworzyć plik na serwerze i upewnij się, że jest tworzony, aby upewnić się, że funkcja działa w ogóle. Lub punkt przerwania w kodzie w trybie debugowania ... –

+0

nie ma obsługi błędów, myślę, że powinienem spróbować zmienić pakiet narzędzi kontroli ajax –

0

Jeśli użyć

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"></asp:ToolkitScriptManager> 

w przed TextBox1

+0

Gdzie jest to asp: ToolkitScriptManager Nie mogę znaleźć odniesienia do niego w dowolnym miejscu? – djack109

+0

po prostu skopiuj tę próbkę i zmień atrybut i używaj. – user2178872

0

spróbować tej sygnatury dla metody internetowej: public string[] GetCompletionList(string prefixText, int count, string contextKey) myślę extender przyzwyczajenie przyjąć dowolny inny typ zwracany oprócz string []

+0

użycie argumentu klawisza kontekstowego jest opcjonalne. – Mrudula

0

W moim przypadku musiałem usunąć komentarz tej linii w pliku ASMX

// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService]