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

Résolu
piloulr Messages postés 14 Date d'inscription samedi 4 octobre 2003 Statut Membre Dernière intervention 28 juillet 2006 - 21 mars 2006 à 13:29
piloulr Messages postés 14 Date d'inscription samedi 4 octobre 2003 Statut Membre Dernière intervention 28 juillet 2006 - 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

17 réponses

piloulr Messages postés 14 Date d'inscription samedi 4 octobre 2003 Statut Membre Dernière intervention 28 juillet 2006
22 mars 2006 à 13:46
CA MARCHE ::::::: MERCIIIIII

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

JPL
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
21 mars 2006 à 13:58
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
0
piloulr Messages postés 14 Date d'inscription samedi 4 octobre 2003 Statut Membre Dernière intervention 28 juillet 2006
21 mars 2006 à 14:47
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?
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
21 mars 2006 à 14:52
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
piloulr Messages postés 14 Date d'inscription samedi 4 octobre 2003 Statut Membre Dernière intervention 28 juillet 2006
21 mars 2006 à 14:58
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 !!!!!
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
21 mars 2006 à 15:19
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
0
piloulr Messages postés 14 Date d'inscription samedi 4 octobre 2003 Statut Membre Dernière intervention 28 juillet 2006
21 mars 2006 à 15:20
Voici le code de ma page Aspx


<%
@
Page
Language="VB"
MasterPageFile="~/CellDefault.master"
AutoEventWireup="false"
CodeFile="Default.aspx.vb"
Inherits="_Default"
title="Default Page" %>
0
piloulr Messages postés 14 Date d'inscription samedi 4 octobre 2003 Statut Membre Dernière intervention 28 juillet 2006
21 mars 2006 à 15:24
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 !!!

???
0
piloulr Messages postés 14 Date d'inscription samedi 4 octobre 2003 Statut Membre Dernière intervention 28 juillet 2006
21 mars 2006 à 15:30
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 ?
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
21 mars 2006 à 15:37
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
0
piloulr Messages postés 14 Date d'inscription samedi 4 octobre 2003 Statut Membre Dernière intervention 28 juillet 2006
21 mars 2006 à 15:51
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 à ""

:(
0
piloulr Messages postés 14 Date d'inscription samedi 4 octobre 2003 Statut Membre Dernière intervention 28 juillet 2006
21 mars 2006 à 16:05
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.
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
21 mars 2006 à 16:07
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
0
piloulr Messages postés 14 Date d'inscription samedi 4 octobre 2003 Statut Membre Dernière intervention 28 juillet 2006
21 mars 2006 à 16:29
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 ???
0
piloulr Messages postés 14 Date d'inscription samedi 4 octobre 2003 Statut Membre Dernière intervention 28 juillet 2006
21 mars 2006 à 16:35
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>


......
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
21 mars 2006 à 16:48
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&
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
22 mars 2006 à 13:30
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
0
Rejoignez-nous