jeudi 21 octobre 2010

Argument de publication ou de rappel non valide

Lors d'un développement d'une application web avec AJAX, j'ai rempli un contrôle ListBox avec AJAX.
Il y a plusieurs appels AJAX sur la page avant Postback (que l’on clique sur le bouton pour enregistrement).
Au moment de l’enregistrement, j'ai eu le message d'erreur suivant:
Argument de publication ou de rappel non valide. La validation d'événement est activée via <pages enableEventValidation="true"/> dans la configuration ou via <%@ Page EnableEventValidation="true" %> dans une page. Pour des raisons de sécurité, cette fonctionnalité vérifie si les arguments des événements de publication ou de rappel proviennent du contrôle serveur qui les a rendus à l'origine. Si les données sont valides et attendues, utilisez la méthode ClientScriptManager.RegisterForEventValidation afin d'inscrire les données de publication ou de rappel pour la validation.
Depuis  ASP.NET 2.0 il y a une validation d'événement qui vérifie la requête POST pour s'assurer  que l'événement de Postback est valide.
La validation d'événement évite l'attaque qui renvoi  des données par l'événement qui ne vient pas d’un contrôle enregistré sur la page
Les solutions qui peuvent corriger le problème :
1. Désactiver la validation d'événement (mais risque de sécurité) avec EnableEventValidation = false.
2. Utiliser la méthode d’Ajax UpdatePanel (Placer le contrôle Listbox dans UpdatePanel et déclencher la mise à jour  pour ajouter/supprimer des éléments de Listbox). Le viewstate sera alors mis à jour et la validation d'événement passe.
3. Utiliser Postback pour ajouter/supprimer les items du contrôle ListBox
J'ai réussi à ne plus avoir ce message d'erreur en vidant le contenu du contrôle  ListBox  lors de l’envoi de formulaire. Le contrôle ListBox reste en même état avant et après Postback.
document.forms[0].onsubmit = function() {
    document.getElementById('IdControle').options.length = 0;
};

Aucun commentaire:

Enregistrer un commentaire