juillet
2008
Faisant suite à mon post précédent, je vais expliquer ici comment simuler un click de bouton.
Prenons un exemple avec un TextBox et un bouton :
<asp:Button ID="monBouton" runat="server" Text="go" OnClick="clic" />
on a l’evenement du click dans le code behind écrit ainsi :
{
Response.Write("le bouton a été cliqué");
}
Comment simuler un clic par exemple lorsque la valeur du textbox change ?
Pour ca, suivant le meme principe que pour le post précédent, on va utiliser la méthode GetPostBackEventReference.
{
leTextBox.Attributes["onchange"] = Page.ClientScript.GetPostBackEventReference(monBouton, monBouton.ID);
base.OnLoad(e);
}
Si on s’arrete à ca, ASP.NET va nous lever une belle erreur :
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.
Cette erreur provient du fait qu’ASP.NET effectue un controle sur le POST pour détecter d’éventuelles attaques d’injections ou d’altération de la requete POST. C’est le principe d’event validation.
Une solution pour le désactiver est de mettre la propriété EnableEventValidation à false dans la directive de Page.
Ceci aura pour effet de désactiver complètement ce processus de validation, ce qui peut etre nécessaire dans certain cas, mais ne permet plus cette vérification automatique pour toute la page (ceci ne peut pas etre fait controle par controle).
L’autre solution plus propre est d’indiquer à ASP.NET que ce postpack est tout à fait autorisé. C’est ce que permet l’utilisation de la méthode RegisterForEventValidation.
Cet appel ne pourra etre fait qu’en surchargeant la méthode Render de la page :
{
Page.ClientScript.RegisterForEventValidation(monBouton.UniqueID, monBouton.ID);
base.Render(writer);
}
Désormais, le post est bien pris en compte et la méthode clic associée au bouton est bien lancée.
Par contre, le postback n’ayant pas réélement été executé par le bouton, on ne pourra pas utiliser la technique employée dans ce tutoriel pour vérifier quel bouton a effectué le postback.
On pourra par contre utiliser la méthode décrite dans la FAQ ASP.NET, qui en temps normal, ne fonctionne pas pour les boutons :
{
leTextBox.Attributes["onchange"] = Page.ClientScript.GetPostBackEventReference(monBouton, monBouton.ID);
if (IsPostBack && Request.Form["__EVENTTARGET"] != null && Request.Form["__EVENTTARGET"].Contains(monBouton.UniqueID))
{
Response.Write("la page a été postée par monBouton <br/>");
}
base.OnLoad(e);
}
Commentaires récents
- [Tests] Arrange Act Assert, une traduction ? dans
- [UnitTest][C#] Tester une méthode privée dans
- Récupérer une valeur d’un contrôle depuis une autre Form / inclusions croisées et déclaration anticipée dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
Archives
- janvier 2013
- avril 2012
- janvier 2012
- juin 2011
- janvier 2011
- décembre 2010
- novembre 2010
- septembre 2010
- juin 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- août 2009
- juillet 2009
- mai 2009
- avril 2009
- mars 2009
- janvier 2009
- décembre 2008
- novembre 2008
- octobre 2008
- septembre 2008
- août 2008
- juillet 2008
- juin 2008
- mai 2008
- avril 2008
- mars 2008
- février 2008
- janvier 2008
- décembre 2007
- novembre 2007
- octobre 2007
- septembre 2007
- août 2007
- juillet 2007
- juin 2007
- mai 2007