2008-09-11 6 views
3

Ich erhalte diesen Fehler auf einem Update-Panel innerhalb eines PopupControlExtender, das in einem DragPanelExtender ist.ASP.Net UpdatePanel ImageButton verursacht "this._postbackSettings.sync ist null oder kein Objekt"

Ich sehe, dass viele andere Leute dieses Problem haben und verschiedene Korrekturen haben, von denen keiner für mich gearbeitet hat.

Ich würde gerne eine logische Erklärung dafür hören, warum dies vorkommt und eine idiotensichere Möglichkeit, solche Probleme in der Zukunft zu vermeiden.

Ich habe festgestellt, dass wie andere diesen Fehler nicht auftreten, wenn der Auslöser ein LinkButton und nicht ein ImageButton ist, immer noch fragen, ob jemand eine Erklärung hat.

Antwort

1

Meine beste Schätzung ist, dass das UpdatePanel nicht in der Lage ist, die benutzerdefinierte "async" -Eigenschaft für die Postback-Anfrage richtig zu schreiben. Dies liegt wahrscheinlich an der Blockierung durch eines der Steuerelemente, die es umhüllen (mein Gefühl ist, dass es das popupControlExtender ist - es neigt dazu, seltsames Verhalten mit updatepanels zu haben, da es beabsichtigt ist, die Ereignisse darin für seine Ein-/Ausblendungszwecke zu verwalten).

Ich würde entweder empfehlen, das Updatepanel zu entfernen und Ihre eigene Lösung für Ihr spezifisches Geschäftsbedürfnis zu rollen, um es dort zu haben, oder Ihr eigenes Popup-Skript zu implementieren (wahrscheinlich etwas einfacher zu schreiben).

Übrigens ist die "this._postbackSettings.async" für einige Hintergrundinformationen Ihr AJAX.NET-Framework versucht herauszufinden, ob dies ein asynchroner Anruf ist oder nicht. Sie können es möglicherweise überwinden, indem Sie dies programmatisch festlegen, bevor das Postback gesendet wird (fangen Sie das Postback-Ereignis ab und fügen Sie das Feld zur Postback-Anforderung hinzu, wenn es nicht bereits vorhanden ist).

Nur ein paar Gedanken ... Ich glaube nicht, dass es eine "plug and play" Antwort für diesen gibt!

+1

Ich endete mit einem LinkButton mit einem Image, das ich für die einfachste Lösung hielt, obwohl das, was Sie vorschlagen, wahrscheinlich im Allgemeinen zuverlässiger ist. – YonahW

1

Die Einstellung "EnablePartialRendering" auf false in der ScriptManager-Steuerung verhindert den Fehler, aber es ist keine optimale Lösung. Den Vorteil des partiellen Renderings zu verlieren, kann je nach Anwendung eine große Sache sein.

Nur für das Protokoll, ich tat nicht genau das gleiche wie andere Leute, die den Fehler sahen. Ich habe einen PopupControlExtender, in dem eine Checkboxliste steht. Ich habe einen Link "Alle auswählen" mit einer JavaScript-Methode hinzugefügt, um programmgesteuert alle auszuwählen/abzuwählen. Ich verwende keine Imagebutton. Ich habe den Fehler nicht gesehen, bevor ich das Javascript hinzugefügt habe und nun bleibt der Fehler auch nach dem Entfernen bestehen. Es muss noch eine Änderung geben, die ich vermisse.

Ich hoffe, das jemand hilft ...

--Matt

2

ich das gleiche Problem gehabt haben und haben festgestellt, nicht wirklich eine befriedigende Lösung, bis ich auf http://siderite.blogspot.com/2009/02/thispostbacksettingsasync-is-null-or.html endete das ist genau das tut, was ich wollen.

Nur Probleme mit möglichen toten Links in Zukunft hier zu vermeiden, ist der Code:

var script = @" 
if (Sys && 
    Sys.WebForms && Sys.WebForms.PageRequestManager && 
    Sys.WebForms.PageRequestManager.getInstance) 
{ 
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    if (prm && 
     !prm._postBackSettings) 
    { 
     prm._postBackSettings = prm._createPostBackSettings(false, null, null); 
    }"; 

ScriptManager.RegisterOnSubmitStatement(
    Page, 
    Page.GetType(), 
    "FixPopupFormSubmit", 
    script); 

Im Fall eines einreichen, ohne dass der _postBackSettings gesetzt wird es schafft sie, was die Nullreferenz Ausnahme als _postBackSettings verschwinden .async ist dann verfügbar.

Hoffe, das hilft,

G.

+0

Es ist wirklich eine lange Zeit her, seit ich das letzte Mal mit diesem Problem zu tun hatte, da ich Microsoft Ajax nicht mehr verwende, aber das sieht nach einer netten, sauberen Lösung aus. – YonahW