Ich habe mehrere kleine div
s, die jQuery
ziehbar verwenden. Diese div
s werden in einem platziert UpdatePanel
und beim Dragstop verwende ich die _doPostBack()
JavaScript-Funktion, mit der ich die erforderlichen Informationen aus dem Formular der Seite extrahiere.
Mein Problem ist, dass beim Aufrufen dieser Funktion die gesamte Seite neu geladen wird, ich jedoch nur möchte, dass das Update-Panel neu geladen wird.
javascript
asp.net
webforms
updatepanel
postback
ErnieStings
quelle
quelle
Antworten:
Hier ist eine Komplettlösung
Gesamtes Formular-Tag der asp.net-Seite
Gesamter Inhalt der Code-Behind-Klasse der Seite
Was ist los?
Für den Client werden zwei Eingabesteuerelemente gerendert:
__EVENTTARGET
erhält Argument 1 von __doPostBack__EVENTARGUMENT
erhält Argument 2 von __doPostBackDie __doPostBack-Funktion wird folgendermaßen gerendert:
Wenn das Formular gesendet / zurückgesendet wird:
javascript:__doPostBack('ButtonB','')
dann wird der Schaltflächenklick-Handler für diese Schaltfläche ausgeführt.Was ist, wenn ich keinen Klick-Handler ausführen möchte, sondern stattdessen etwas anderes tun möchte?
Sie können alles, was Sie wollen, als Argumente übergeben
__doPostBack
Sie können dann die versteckten Eingabewerte analysieren und spezifischen Code entsprechend ausführen:
Weitere Hinweise
ClientIDMode="Static"
, können Sie Folgendes tun :__doPostBack('<%= myclientid.UniqueID %>', '')
.__doPostBack('<%= MYBUTTON.UniqueID %>','')
quelle
Per Phairoh: Verwenden Sie diese Option auf der Seite / Komponente, falls sich der Panel-Name ändert
quelle
Während Phairohs Lösung theoretisch fundiert erscheint, habe ich auch eine andere Lösung für dieses Problem gefunden. Durch Übergeben der UpdatePanels-ID als Parameter (Ereignisziel) für die doPostBack-Funktion wird das Update-Panel zurückgesendet, jedoch nicht die gesamte Seite.
* Hinweis: Der zweite Parameter dient zum Hinzufügen von Ereignisargumenten
hoffe das hilft jemandem!
EDIT: so scheint es, dass der gleiche Rat oben gegeben wurde, als ich tippte :)
quelle
Mit
__doPostBack
direkt ist sooooo die 2000er Jahre. Jeder, der 2018 WebForms codiert, verwendet GetPostBackEventReference(Im Ernst, das Hinzufügen als Antwort der Vollständigkeit halber. Die
__doPostBack
direkte Verwendung ist eine schlechte Praxis (ein einfacher Unterstrich zeigt normalerweise ein privates Mitglied an und ein doppeltes ein universelleres privates Mitglied), obwohl es sich wahrscheinlich nicht ändert oder veraltet Punkt. Wir haben einen vollständig unterstützten Mechanismus in ClientScriptManager.GetPostBackEventReference .)Angenommen, Ihr btnRefresh befindet sich in unserem UpdatePanel und verursacht ein Postback. Sie können GetPostBackEventReference wie folgt verwenden ( Inspiration ):
quelle
Wenn jemand Probleme damit hat (wie ich), können Sie den Postback-Code für eine Schaltfläche erhalten, indem Sie das Attribut UseSubmitBehavior = "false" hinzufügen. Wenn Sie die gerenderte Quelle der Schaltfläche untersuchen, sehen Sie genau das Javascript, das Sie ausführen müssen. In meinem Fall wurde eher der Name der Schaltfläche als die ID verwendet.
quelle
Haben Sie versucht, die Client-ID des Update-Panels an die Funktion __doPostBack zu übergeben? Mein Team hat dies getan, um ein Update-Panel zu aktualisieren, und soweit ich weiß, hat es funktioniert.
quelle
Verwenden Sie zunächst keine Update-Panels. Sie sind die zweitbeste Sache, die Microsoft jemals für den Webentwickler erstellt hat.
Zweitens, wenn Sie müssen Update Panels verwenden, versuchen Sie die Updatemode- Eigenschaft auf Bedingte Einstellung. Fügen Sie dann einem Asp: Hidden-Steuerelement, das Sie der Seite hinzufügen, einen Auslöser hinzu. Weisen Sie das Änderungsereignis als Auslöser zu. Ändern Sie in Ihrem Dragstop-Ereignis den Wert des ausgeblendeten Steuerelements.
Dies ist ungetestet, aber die Theorie scheint stichhaltig zu sein ... Wenn dies nicht funktioniert, können Sie dasselbe mit einer asp: -Schaltfläche versuchen. Stellen Sie einfach die Anzeige ein: keinen Stil darauf und verwenden Sie das Klickereignis anstelle des Änderungsereignisses.
quelle
Sie können nicht aufrufen,
_doPostBack()
da dies das Einreichen des Formulars erzwingt. Warum deaktivierst du das nichtPostBack
auf demUpdatePanel
?quelle