1

Dies ist C# .net 2.0. Ich verwende eine Masterpage.AJAX AutocompleteExtender funktioniert nicht. Web Service funktioniert

  • Der WebService funktioniert problemlos.
  • Ich bin völlig ratlos. Wenn ich die TextBox eintippe, passiert nichts.

Dateien:

EditTicket.aspx AutoComplete.asmx App_Code/AutoComplete.cs

EditTicket.aspx:

 <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc2" %> 


     <asp:ScriptManager id="ScriptManager1" runat="server" EnablepageMethods="true"> 
     <Services> 
      <asp:ServiceReference Path="AutoComplete.asmx" /> 
     </Services> 
     </asp:ScriptManager> 

    <cc2:AutoCompleteExtender 
     runat="server" 
     ID="AutoCompleteExtender1" 
     ServicePath="AutoComplete.asmx" 
     ServiceMethod="AutoComplete2" 
     MinimumPrefixLength="1" 
     CompletionSetCount="12" 
     TargetControlID="TextBox3" 
     EnableCaching="True" > 
    </cc2:AutoCompleteExtender> 

<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox> 

AutoComplete.asmx:

<%@ WebService Language="C#" CodeBehind="~/App_Code/AutoComplete.cs" Class="AutoComplete" %> 

AutoComplete.cs:

using System; 
using System.Web; 
using System.Collections; 
using System.Web.Services; 
using System.Web.Script.Services; 
using System.Web.Services.Protocols; 
using System.Collections.Generic; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Data; 


/// <summary> 
/// Summary description for AutoComplete 
/// </summary> 
[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ScriptService] 
public class AutoComplete : System.Web.Services.WebService { 

    public AutoComplete() { 

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

    [WebMethod] 
    [ScriptMethod] 
    public string[] AutoComplete2(string prefixText,int count) 
    { 
     string conString = ConfigurationManager.ConnectionStrings["DB"].ConnectionString; 
     SqlConnection connection = new SqlConnection(conString); 
     connection.Open(); 
     SqlParameter prm; 
     string sql = "Select program_name FROM CM_Programs WHERE program_name LIKE @prefixText"; 
     SqlDataAdapter cmd = new SqlDataAdapter(sql, connection); 
     prm = new SqlParameter("@prefixText", SqlDbType.VarChar, 50); 
     prm.Value = prefixText+ "%"; 
     cmd.SelectCommand.Parameters.Add(prm); 
     DataTable dt = new DataTable(); 
     cmd.Fill(dt); 
     string[] items = new string[dt.Rows.Count]; 
     int i = 0; 
     foreach (DataRow dr in dt.Rows) 
     { 
      items.SetValue(dr["program_name"].ToString(),i); 
      i++; 
     } 
     connection.Close(); 
     return items; 
    } 
} 

Antwort

1

"Nichts passiert" ist keine einfache Beschreibung auf gehen. Wenn Sie sagen, dass nichts passiert, haben Sie das überprüft

  • Der Server-Code wird für den Web-Service getroffen?
  • Ihre Anfrage wird ausgeführt und Ergebnisse zurückgegeben?
  • Ihr Artikel-Array wird gerade korrekt ausgefüllt?
  • Wenn "nichts" ist, dass nichts von dem oben genannten passiert, würde ich anfangen zu überprüfen, dass es keine Javascript-Fehler auf der Seite gibt und dass Ihr AutoComplete-Extender korrekt rendert (überprüfen Sie die Seitensteuerelemente in einer Ablaufverfolgung).

    +1

    Ich konnte den Webservice selbst ausführen und die Ergebnisse meiner Autovervollständigung in einem Array wie ich erwartet bekommen. Dieser Teil hat gut funktioniert. Am Ende war es, dass meine Website keine AJAX-Website war, also musste ich die web.config einer AJAX-Site kopieren und mit meiner web.config zusammenführen. – somacore

    +0

    Können Sie explizit angeben, was Sie in web.config geändert haben, weil ich die gleiche Art von Problem habe? – Blerta

    +0

    ok es funktioniert jetzt für mich. Meine Lösung ignorierte diesen Satz einfach nicht im Web-Service // Um ​​diesen Web-Service aus dem Skript mit //ASP.NET AJAX aufzurufen, entfernen Sie die Kommentarzeichen für die folgende Zeile. [System.Web.Script.Services.ScriptService()] – Blerta

    1

    Versuchen Sie, an der CompletionInterval-Eigenschaft zu fummeln. Ich habe dieses Steuerelement in der Vergangenheit verwendet und das erwartete Verhalten nicht erkannt, bis ich CompletionInterval auf einen viel niedrigeren Wert gesetzt habe. Es ist standardmäßig 1000 (ms), ich würde es mit einem Wert von 1 versuchen, nur um zu sehen, ob alles funktioniert, wie es sollte (und Womps Schritte sollten helfen, einzugrenzen, wo die Kommunikationsprobleme auftreten) und wenn es tut arbeiten Sie, erhöhen Sie den Wert, bis Sie einen Wert treffen, der Sinn macht (1 ms sendet viele Anfragen an den Server). Berichten Sie darüber, was funktioniert und was nicht.

    +0

    danke für die Hilfe. Ich habe es herausgefunden (siehe Kommentar oben), aber das Vervollständigungsintervall muss definitiv vom Standard gesenkt werden, so dass der Benutzer nicht sitzen muss und darauf warten muss, dass Ergebnisse angezeigt werden. Vielen Dank! – somacore

    Verwandte Themen