5 Stimmen

ASP.NET jQuery AutoComplete - Textfeld reagiert nicht nach der ersten Suche

Bislang habe ich das gleiche Problem bei anderen Fragen auf dieser Website noch nicht gefunden. Hier ist, was ich erlebe:

Ich habe eine ASP.NET WebForms app mit einem UpdatePanel mit einem Suchbereich, wo ich eine ASP:TextBox, die ich für eine jQuery Autocomplete verwenden.

$(document).ready(function() {
    $("#tabContainer_tabSearchBreaks_txtSearchName").autocomplete("AutoCompleteEmployee.ashx", { minChars: 3, maxItemsToShow: 10 });
});

Diese ganze Sache funktioniert gut, aber wenn ich auf einen ASP:Button klicke und etwas Code für den Suchbereich bearbeite, funktioniert das Autocomplete-Javascript nicht mehr.

Irgendwelche Ideen???

Es muss eine Lösung geben, um das Textfeld zurückzusetzen, um den js-Code aufzurufen.

[Update - Mehr Code] Hier sehen Sie, was die Aktualisierungsschaltfläche für den Suchbereich tut, der vom Code für die automatische Vervollständigung getrennt ist:

 try {
     int employeeID;
     string[] namelst = txtSearchName.Text.Split(new string[] {
         " "
     }, StringSplitOptions.None);
     employeeID = int.Parse(namelst[2].Substring(1, namelst[2].Length - 2));
     string name = namelst[0] + " " + namelst[1];
     var breaks = bh.ListBreaksForEmployeeByDate(employeeID, DateTime.Parse(txtFromDate.Text), txtToDate.Text.Length > 0 ? DateTime.Parse(txtToDate.Text).AddDays(1).AddSeconds(-1) : DateTime.Today.AddDays(1).AddSeconds(-1));

     if (breaks.Count() > 0) {
         lblEmployeeTitle.Text = "Breaks for " + name;
         gridSearchBreaks.DataSource = breaks;
         gridSearchBreaks.DataBind();
     }
 } catch {}

Ich hoffe, das hilft. Vorläufig habe ich die Registerkarte, die dieses Problem enthält, vor den Benutzern verborgen.

10voto

Alek Davis Punkte 10452

Ich glaube, Sie haben ein klassisches Problem mit ASP.NET UpdatePanel-Steuerelementen und jQuery. Das Problem ist das folgende: jQuery-Code (in Ihrem Fall ist es Auto-Vervollständigen, aber es kann alles sein) funktioniert gut auf der Seite laden, aber es funktioniert nicht mehr nach einem teilweisen Postback. Wenn dies der Fall ist, gibt es ein paar Dinge, die Sie über die Verwendung von jQuery mit UpdatePanel-Steuerelementen verstehen müssen.

Erstens hören alle in $(document).ready definierten Ereignisbindungen nach dem ersten teilweisen Postback auf zu funktionieren (und ich gehe davon aus, dass der Klick auf Ihre Schaltfläche einen teilweisen Postback verursacht). Das ist einfach die Art und Weise, wie ASP.NET funktioniert. Wie kann man das also beheben? Nun, es gibt mehrere Möglichkeiten, dieses Problem zu lösen. Eine typische Empfehlung ist, $(document).ready durch die ASP.NET AJAX-eigene pageLoad Veranstaltung. Dies mag zwar ein Problem lösen, wird aber höchstwahrscheinlich zu weiteren Problemen führen, da Sie nun bei jedem partiellen Postback Ereignisse binden, was zu einer wiederholten Ausführung von Ereignishandlern für ein einzelnes Ereignis führt. Sie können einige Probleme lösen, indem Sie Bindung aufheben für Ihren Selektor, bevor Sie irgendwelche Bindungen vornehmen. Für einfache Ereignisbindungen können Sie weiterhin $(document).ready mit dem live Funktion (anstelle von Klick, Hover, etc.).

Ich habe keine jQuery-Plugins mit UpdatePanel verwendet, daher kann ich nicht mit Sicherheit sagen, was Sie tun müssen, aber sobald Sie verstehen, was passiert, sollte es nicht schwer sein, den richtigen Ansatz zu finden. Um mehr über dieses Problem und mögliche Lösungen zu erfahren, lesen Sie bitte den Artikel von Dave Ward $(document).ready() und pageLoad() sind nicht dasselbe! (der Artikel enthält mehrere Beispiele).

1voto

David Hedlund Punkte 125085

Ich schlage vor, Sie verwenden ein Tool wie Firebug mit deren Hilfe Sie feststellen können, wo der Fehler auftritt. Sie können Ajax-Anfragen überwachen, um zu sehen, ob es tatsächlich aufgehört hat, Anfragen zu stellen, ob sie den ganzen Weg durchkommen und welche Antwort Sie erhalten. Sie können damit auch Javascript zur Laufzeit debuggen und erhalten oft Fehlermeldungen, die Sie sonst vielleicht nicht bemerkt hätten. Das klingt nach genau dem Werkzeug, das Sie im Moment brauchen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X