Aufrufen ASP.NET TextChanged event von JavaScript mit __doPostBack
Wie viele andere auch, versuche ich, zu beschwören .NET-Steuerung ist server-side-event von JavaScript.
Speziell möchte ich auf das Feuer der TextChanged
Ereignis auf ein Textfeld mit dem Namen txtSearch
. Also, ich bin auf der Suche zu erreichen, wird das folgende Ereignis aus client-Seite:
protected void txtSearch_TextChanged(object sender, EventArgs e)
Gelesen viele Antworten auf SO (zum Beispiel hier und hier) ich habe Folgendes JavaScript:
__doPostBack('ctl00$ctl00$Container$Main$txtSearch', 'TextChanged');
Aber die server-side-event nie ausgelöst.
Habe ich versucht, zahlreiche Permutationen: mit der AutoPostBack true und false mit und ohne Ereignis deklariert in der server-side-Anweisungen auf der ASPX - (d.h. OnTextChanged=""), mit der EventValidation ausgeschaltet in der page-Deklaration, mit der ClientID, anstatt die UniqueID in der EVENTTARGET-parameter... aber die Veranstaltung ist noch nie gefeuert.
Ein paar andere Punkte
- die
txtSearch
button-Steuerelement ist auch der Auslöser für ein UpdatePanel, in Fall, dass Angelegenheiten. - Ich die Umwandlung bestehender code, von denen es eine ganze Menge, und bin auf der Suche nach etwas, das ich fallen kann auf jeder Seite, statt der Konvertierung der code-behind-Veranstaltungen zu PageMethods.
Kann mir jemand sagen was ich tun muss?
Page_Load
event gefeuert?ja, es funktioniert.
InformationsquelleAutor awj | 2012-12-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hab das versucht, und es funktioniert für mich:
Server-Seite
asp:TextBox
, und die client-Seiteinput
die feuert__doPostBack
auf klicken Sie auf. Die__doPostBack
- script generiert durchPostBackOptions
:Den
txtSearch_TextChanged
event-handler wird ausgelöst, wenn der Wert der text box geändert wird, und diesubmit
Schaltfläche geklickt wird.Aber beachten Sie, für Steuerelemente wie
TextBox
der text ist gespeichert in der viewstate; der neue text wird vom Benutzer eingegeben, speichert in form von Daten. Wenn dieTextBox
laden Sie die viewstate-Daten, es wird der alte Wert. Dies ist im Vergleich mit dem neuen Wert, kommt in der form. Wenn die Werte unterschiedlich sind, dieTextChanged
- Ereignis ausgelöst wird. Wenn Nein, ist der event-handler nicht gefeuert werden. Dies ist der Grund für diePage_Load
event gefeuert (postback auftrat), abertxtSearch_TextChanged
hat nicht Feuer, wegen der Wert derTextBox
auch nicht ändern.dies ist die richtige hinzufügen
__doPostBack
-wie Referenzen. Der name der server-Seite Steuern können geändert werden, und dann alle Ihre snippets nicht funktionieren. Aber es ist bis zu Ihnen, wie Sie diese Blöcke. (2) in meinem BeispielAutoPostBack
- Eigenschaft ist nicht festgelegt. Der Standardwert für ist esfalse
, so dass dieses feature standardmäßig deaktiviert ist. Und schließlich die Wert Ihr text-box hat sich seit dem letzten postback zum server-side-events zu feuern. Dies ist, wie die server-side-events arbeiten.Bitte versteh mich nicht falsch, @Alex, in diesem Stadium wäre ich bereit zu implementieren, nichts gearbeitet. Nun habe ich dein code funktioniert (ich glaube ich entfallen die OnTextChanged-Attribut zuvor) und untersuche, wie kann ich Draht mit meine benutzerdefinierten Ereignisses zum auslösen der postback in besonderen Lebenslagen.
meinst du zum auslösen des postback für das Textfeld, auch wenn der text, der Wert ändert sich nicht? Wenn ja, müssen Sie analysieren, post-Daten manuell (z.B. in
Page_Load
), und rufen Sie danntxtSearch_TextChanged
auch manuell.Nein, ich habe eine benutzerdefinierte Funktion, wobei eine Grenze für die Anzahl der Zeichen, die eingegeben werden, und dann ein timeout passiert, um zu sehen, ob der Benutzer zur Eingabe von mehr Zeichen (jeder Tastendruck setzt den timer). Erst danach geht es zu einem postback stattfindet. Wir haben eine Ajax-Control-Toolkit Extender, der dies Tat, und dies ist, was ich jetzt ersetzen.
InformationsquelleAutor Alex
Set auotpostback-Eigenschaft auf false festlegen, die für Ihre txtbox und AutoEventWireup="true" für Ihre Steuerungs-oder page-Deklaration.
OnTextChanged event server-Seite wird auch funktionieren.
wenn Sie nicht mit jquery in Ihr Projekt, lassen Sie mich wissen, und ich gebe dir ein paar javascript-Beispiel ohne jquery mit.
Ok. Jetzt überprüfe ich es in meinem Projekt
ja du hast Recht, Fehler ist vorhanden 🙂 jetzt löse ich es in mein Projekt zu. Aber postback-Ereignis entstanden ist.
Mir ist aufgefallen das Bearbeiten vorgenommen werden mussten, um den ID-parameter in der __doPostBack-Aufruf. Ich hatte Ihren aktualisierten Vorschlag, bevor ich schrieb meinen vorherigen Kommentar, und dies war es, was bewirkt, dass die Seite aktualisieren/neu laden; es immer noch nicht auslösen, das TextChanged-Ereignis.
Ich veränderte Skript. Jetzt funktioniert es ohne Fehler im FF. Sie können es verwenden, ohne seTimeout() ( ich muss es in meinem Projekt). Ich habe zu tun einige Aktionen, bevor postback zu. Und OnTextChanged-event auf server-Seite feuert im meinem Fall.
InformationsquelleAutor Boriss Pavlovs