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;
};