ASP.Net UpdatePanel ImageButton provoque « this._postbackSettings.async est nul ou n'est pas un objet »

StackOverflow https://stackoverflow.com/questions/57586

Question

J'obtiens cette erreur sur un panneau de mise à jour dans un popupControlExtender qui se trouve dans un dragPanelExtender.

Je vois que beaucoup d'autres personnes ont ce problème et proposent diverses solutions, dont aucune n'a fonctionné pour moi.

J'aimerais entendre une explication logique sur la raison pour laquelle cela se produit et un moyen infaillible d'éviter de tels problèmes à l'avenir.

J'ai constaté que, comme d'autres soutiennent, cette erreur ne se produit pas lorsque le déclencheur est un LinkButton plutôt qu'un ImageButton, je me demande toujours si quelqu'un a une explication.

Était-ce utile?

La solution

Ma meilleure hypothèse est que UpdatePanel n'est pas en mesure d'écrire correctement la propriété "async" personnalisée dans la demande de publication.Cela est probablement dû au blocage de l'un des contrôles qui l'encapsulent (mon intuition est qu'il s'agit du popupControlExtender - il a tendance à avoir un comportement étrange avec les panneaux de mise à jour, car il est destiné à gérer les événements qu'il contient à des fins d'affichage/masquage).

Je recommanderais soit de supprimer le panneau de mise à jour et de déployer votre propre solution pour les besoins spécifiques de votre entreprise, soit d'implémenter votre propre script contextuel (probablement légèrement plus facile à écrire).

Soit dit en passant, pour un peu de contexte, "this._postbackSettings.async" est votre framework AJAX.NET essayant de déterminer s'il s'agit d'un appel asynchrone ou non.Vous pourrez peut-être le surmonter en définissant cela par programme avant l'envoi de la publication (attrapez l'événement de publication et ajoutez le champ à la demande de publication s'il n'est pas déjà là).

Juste quelques réflexions... Je ne crois pas qu'il existe de réponse « plug and play » pour celle-ci !

Autres conseils

J'ai eu le même problème et je n'ai pas vraiment trouvé de solution satisfaisante jusqu'à ce que je me retrouve sur http://siderite.blogspot.com/2009/02/thispostbacksettingsasync-is-null-or.html qui fait exactement ce que je veux.

Juste pour éviter des problèmes avec d'éventuels liens morts à l'avenir, voici le 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);

Dans le cas d'une soumission sans que _postBackSettings soit défini, il les crée, provoquant la disparition de l'exception de référence nulle car _postBackSettings.async est alors disponible.

J'espère que cela t'aides,

G.

Définir "EnablePartialRendering" sur false sur le contrôle ScriptManager empêche l'erreur, mais ce n'est pas une solution optimale.Perdre le bénéfice du rendu partiel peut s'avérer très problématique, selon votre application.

Juste pour mémoire, je ne faisais pas exactement la même chose que les autres personnes qui ont vu l'erreur.J'ai un PopupControlExtender, dans lequel se trouve une liste de cases à cocher.J'ai ajouté un lien "Sélectionner tout" avec une méthode javascript pour tout sélectionner/désélectionner par programme.Je n'utilise pas de bouton Image.Je n'ai pas vu l'erreur avant d'ajouter le javascript et maintenant, même après l'avoir supprimé, l'erreur persiste.Il doit y avoir un autre changement qui me manque.

J'espère que ça aidera quelqu'un...

--Mat

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top