Question

Je suis en train d'utiliser pour utiliser ClientScriptManager.RegisterForEventValidation pour enregistrer un champ caché et de la valeur que j'ajoute avec ClientScriptManager.RegisterHiddenField. Je le faire lors de l'événement de rendu. Je reçois pas d'erreur, mais ASP.NET 2.0 ne semble pas être la validation sur le terrain. Je peux changer la valeur ou supprimer l'ensemble du champ clientside utilisant Firefox et Firebug, et ASP.NET ne jetterai pas une erreur comme il se doit.

Exemple de code d'une classe de page personnalisée:

protected override void Render(HtmlTextWriter writer)
{
    ClientScript.RegisterHiddenField("stuff", "things");
    ClientScript.RegisterForEventValidation("stuff", "things");
    base.Render(writer);
}

Le champ caché est ajouté à la page, mais ASP.NET ne valide pas le champ ou la valeur sur postback. Qu'est-ce que je manque?

Était-ce utile?

La solution

Je comprends ce que vous essayez de faire, mais en utilisant l'API de validation de l'événement est pas vraiment approprié, car il est destiné à valider que les événements postback ou rappel soulevées par le client sont corrects pour le contrôle du serveur cible, par exemple, en veillant qu'un clic est géré par le bouton correct, ou vérifier qu'un événement de changement sur une liste déroulante est pas une valeur qui n'a pas été à l'origine « connu » au serveur.

Dans votre code, vous générez un champ caché directement au client, donc il n'y a pas de contrôle pour le serveur de référence sur une publication. Même si vous avez utilisé un contrôle de champ caché sur la page du serveur, vous ne serait toujours pas en mesure de valider la valeur du champ car le contrôle ne génère pas d'événements postback (il n'y a aucun moyen pour l'utilisateur d'interagir avec elle, et donc pas événements pour le serveur pour valider).

La solution la plus simple est d'utiliser ViewState pour stocker la valeur du champ, puis vérifiez que postback sur la valeur affichée du champ est égale à la valeur stockée dans ViewState. ViewState est chiffré par défaut il est donc un endroit sûr pour stocker des données qui ne devrait pas changer sur le client.

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