[ASPNET] PostBack, ID du contrôle qui l'a déclenché [Résolu]

piloulr 14 Messages postés samedi 4 octobre 2003Date d'inscription 28 juillet 2006 Dernière intervention - 21 mars 2006 à 13:29 - Dernière réponse : piloulr 14 Messages postés samedi 4 octobre 2003Date d'inscription 28 juillet 2006 Dernière intervention
- 22 mars 2006 à 13:46
Bonjour à tous,

Voilà je me gratte la tête car ça ne vient pas...

Je programme en AspNet 2, VBNet

J'ai une page aspx qui créait dynamiquement les contrôles qui la compose.
Lors du postback je voudrais savoir quel est l'id du contrôle qui l'a déclenché.
Ceci afin d'éviter de recréer tous les contrôles de ma page, uniquement le bouton qui généré le postback afin que l'évenement associé par le addhandler soit activé.

PS : j'ai essayé le

Dim str
As
String = Request.Form(
"__EVENTTARGET").ToString

mais il est = à ""

Merci d'avance pour votre aide...

PilouLR
Afficher la suite 

17 réponses

Répondre au sujet
piloulr 14 Messages postés samedi 4 octobre 2003Date d'inscription 28 juillet 2006 Dernière intervention - 22 mars 2006 à 13:46
+3
Utile
CA MARCHE ::::::: MERCIIIIII

Merci pour le soucis que tu as de résoudre nos soucis.
Merci pour le profesionalisme dont tu fais preuve !!!!

JPL
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de piloulr
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 21 mars 2006 à 13:58
0
Utile
Bonjour,

c'est bizarre que __EventTarget soit nul :s

je viens de tester et tout fonctionne bien pour moi :

Partial Class admin_test_Default
Inherits System.Web.UI.Page


Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
If Not Page.IsPostBack Then
Dim btn As New Button()
AddHandler btn.Click, AddressOf btn_click
btn.ID = "toto"
btn.Text = "coucou :)"


form1.Controls.Add(btn)
End If


If Request.Form("__EVENTTARGET") = "toto" Then
btn_click(Nothing, EventArgs.Empty)
End If
End Sub


Protected Sub btn_click(ByVal sender As Object, ByVal e As System.EventArgs)
Response.Write("je suis clické")
End Sub
End Class



<HR>
Cyril - MVS - MCP ASP
Commenter la réponse de jesusonline
piloulr 14 Messages postés samedi 4 octobre 2003Date d'inscription 28 juillet 2006 Dernière intervention - 21 mars 2006 à 14:47
0
Utile
Merci de ta réponse (rapide :))

En fait le résultat vaut Nothing !!!

Je dois peut-être ajouter que mes contrôles sont créés dans un PlaceHolder.

En fait, j'utilise une MasterPage dans laquelle j'ai mis dans le Content un PlaceHolder.

Mes contrôles ont tous une ID de définie :

Arrrgggg que se passe t'il ? tu as une idée?
Commenter la réponse de piloulr
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 21 mars 2006 à 14:52
0
Utile
Et si tu fais dans le meme esprit que mon code pour tester ?

sinon donne moi ton code que je voie mieux ce qui se passe


<HR>
Cyril - MVS - MCP ASP
Commenter la réponse de jesusonline
piloulr 14 Messages postés samedi 4 octobre 2003Date d'inscription 28 juillet 2006 Dernière intervention - 21 mars 2006 à 14:58
0
Utile
Protected
Sub Page_Load(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)
Handles
Me.Load



if
Not Page.IsPostBack
Then

PRoutines =
New Web.AppCode.PageRoutines

'Création des contrôles
PRoutines.CreateControls(BodyHolder)
PRoutines.UpdateControls(BodyHolder)



Dim toto
As
New Button
toto.ID =
"eee"
toto.Text =
"ererer"
BodyHolder.Controls.Add(toto)

Else

Dim str
As
String = Request.Form(
"__EVENTTARGET").ToString

'Le PostBack :
'1) Il est déclencher par une action (bouton, imagebouton,...), dans ce cas il faut impérativement recréer le controle
' pour pouvoir déclencher l'événement
'2) Autres, il faut recréer tous les controles
PRoutines =
New Web.AppCode.PageRoutines

'Affectation des valeurs aux controles
'PRoutines.CreateControls(BodyHolder)
'PRoutines.UpdateControls(BodyHolder)
End
If
If Request.Form(
"__EVENTTARGET") =
"toto"
Then :::::::::::: ICI le résultat vaut ""
' btn_click(Nothing, EventArgs.Empty)
End
If
End
Sub

En mettant simplement l'ajout du bouton TOTO, le résultat est incorrect !!!!!
Commenter la réponse de piloulr
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 21 mars 2006 à 15:19
0
Utile
Si tu supprimes New Web.AppCode.PageRoutines tu as le bon résultat ? car tu retombes sur le meme code que moi .. mis à part que je suis dans le page_init qui est l'evenement conseillé pour rajotué des controles dynamiquement :)


<HR>
Cyril - MVS - MCP ASP
Commenter la réponse de jesusonline
piloulr 14 Messages postés samedi 4 octobre 2003Date d'inscription 28 juillet 2006 Dernière intervention - 21 mars 2006 à 15:20
0
Utile
Voici le code de ma page Aspx


<%
@
Page
Language="VB"
MasterPageFile="~/CellDefault.master"
AutoEventWireup="false"
CodeFile="Default.aspx.vb"
Inherits="_Default"
title="Default Page" %>
Commenter la réponse de piloulr
piloulr 14 Messages postés samedi 4 octobre 2003Date d'inscription 28 juillet 2006 Dernière intervention - 21 mars 2006 à 15:24
0
Utile
Bon j'ai supprimé :

PRoutines = New Web.AppCode.PageRoutines

'Création des contrôles
PRoutines.CreateControls(BodyHolder)
PRoutines.UpdateControls(BodyHolder)

Et j'obtient le même résultat :: je n'y comprend rien : mon code est pourtant simple !!!

???
Commenter la réponse de piloulr
piloulr 14 Messages postés samedi 4 octobre 2003Date d'inscription 28 juillet 2006 Dernière intervention - 21 mars 2006 à 15:30
0
Utile
Quand je suis en debug et que je pointe ma sourie sur la le Request.Form(
"__EVENTTARGET"),

Il y a un champ qui se nomme AllKeys composée de 5 valeurs dont une vaut : clt00$ContentPlaceHolder$eee qui est l'id de mon bouton...
Mais le Request me rend tjrs "" (mais en passant par le Handle Me.init)

Est-ce que cela peut aider ?
Commenter la réponse de piloulr
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 21 mars 2006 à 15:37
0
Utile
Request.form est un string ! donc tu peux pas avoir une propriété allkeys dans ton string, ca n'a pas de sens :p

tu travailles en .net 1 ou en .net 2 ?

pour "clt00$ContentPlaceHolder$eee" c'est normal puisque les id "héritent" de leur parent pour assurer une unicité au sein de la page !

en tout cas mon exemple fonctionne :p et je pige pas pourquoi toi non



<HR>
Cyril - MVS - MCP ASP
Commenter la réponse de jesusonline
piloulr 14 Messages postés samedi 4 octobre 2003Date d'inscription 28 juillet 2006 Dernière intervention - 21 mars 2006 à 15:51
0
Utile
Je travail .NET2

RequestForm est un HTTPValueCollection composé d'un certain nombre de propriété.

Une de ces propriétés est AllKeys.

Le debug me montre simplement la structure du RequestForm mais le résulat de
Request.Form(
"__EVENTTARGET") est égal à ""

:(
Commenter la réponse de piloulr
piloulr 14 Messages postés samedi 4 octobre 2003Date d'inscription 28 juillet 2006 Dernière intervention - 21 mars 2006 à 16:05
0
Utile
Je viens de trouver ce message sur un forum : qu'en penses-tu ?

it works the same way in c#. but Request.Form["__EVENTTARGET"] is only used
with controls that use javascript to postback, not with asp:button or
asp:imagebutton controls. you check for their postback by checking
Request.Form for an entry with their name.
Commenter la réponse de piloulr
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 21 mars 2006 à 16:07
0
Utile
je voulais dire request.form("__truc") est un string ...

et si tu met la trace =true dans la directive de page tu verras les informations de debugage sinon utilises fiddler pour voir le contenu de l'en-tete de ta requete, on va bien finir par trouver ce qui se passe :)


<HR>
Cyril - MVS - MCP ASP
Commenter la réponse de jesusonline
piloulr 14 Messages postés samedi 4 octobre 2003Date d'inscription 28 juillet 2006 Dernière intervention - 21 mars 2006 à 16:29
0
Utile
Voici ce que me dit Fiddler (donc après le clique sur le bouton et un break dans le page.init)

Au format Raw voici le texte :

OST /CellWeb/Default.aspx HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Referer: http://localhost:1043/CellWeb/Default.aspx
Accept-Language: fr
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: localhost:1043
Content-Length: 409
Proxy-Connection: Keep-Alive
Pragma: no-cache
Cookie: ASP.NET_SessionId=rxqbme55jicpivbcj3nqauuh; login=A154838827654CA705EE77D97C27B408D67D7762BC3DC9EA8EA7EB9440601BACF2C7CF8AF4457D36952720E20F209EF22FB773DE675D157C0F5018CA12F4D15F


__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwUKLTMxNjc3NTM3NWQYAgUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgIFI2N0bDAwJExvZ2luVmlldzIkTG9naW5TdGF0dXMxJGN0bDAxBSNjdGwwMCRMb2dpblZpZXcyJExvZ2luU3RhdHVzMSRjdGwwMwUQY3RsMDAkTG9naW5WaWV3Mg8PZAIBZBl%2Bg0pEsjhjQ%2FXZvWdrel9NK8bW&ctl00%24ContentPlaceHolder%24eee=ererer&__EVENTVALIDATION=%2FwEWAwKhsrVPApmM%2B%2BICAvvA%2FvcIjlAUmjCwb34BlafErol8eb%2BKcqg%3D

Je vois mon bouton eee dans ce texte mais le request.form me rend tjrs ""

Peut être quec comme il est dit dans le message précédent, le requestform ne fonctionne pas avec les Asp:Button ???
Commenter la réponse de piloulr
piloulr 14 Messages postés samedi 4 octobre 2003Date d'inscription 28 juillet 2006 Dernière intervention - 21 mars 2006 à 16:35
0
Utile
Et voici le texte de ma page :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head><link href="App_Themes/SilverTheme/Silver.css" type="text/css" rel="stylesheet" /><title>
Default Page
</title><style type="text/css">
</style></head>

<form name="aspnetForm" method="post" action="Default.aspx" id="aspnetForm">

<script type="text/javascript"


<!--
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}


function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}}
// -->
</script>


......
Commenter la réponse de piloulr
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 21 mars 2006 à 16:48
0
Utile
je comprens plus rien :(

j'ai retesté mon code et ca marche plus :(

par contre si je met un linkbutton ca marche, et effectivement avec des boutons le principe est différent par contre je comprend pas pourquoi l'id est aprés le viewstate

une des solutions serait donc de rajouter une fonction javascript sur le onclick du bouton qui va setter l'__eventtarget pour qu'il est le bon id :s

Je regarderais ce soir à tete "reposé" car la je suis un peu tout embrouillé :)


<HR>
Cyril - MVS - MCP ASP&
Commenter la réponse de jesusonline
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 22 mars 2006 à 13:30
0
Utile
Bonjour,

voici ce que j'ai fait niveau javascript :

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init


If Not Page.IsPostBack Then


Dim btn As New Button()
' AddHandler btn.Click, AddressOf btn_click
btn.ID = "toto"
btn.Text = "coucou :)"
btn.Attributes.Add("onclick", "document.getElementById('__EVENTTARGET').value=this.id")


form1.Controls.Add(btn)
Else
If (Request.Form("__EVENTTARGET") & String.Empty).EndsWith("toto") Then
btn_click(Nothing, EventArgs.Empty)
End If
End If


End Sub


Protected Sub btn_click(ByVal sender As Object, ByVal e As System.EventArgs)
Response.Write("je suis clické")
End Sub


par contre il faut être sur qu'il existe l'input hidden __EventTarget sinon ca plante :)



<HR>



Cyril - MVS - MCP ASP
Commenter la réponse de jesusonline

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.