Postbackurl et ascx

Résolu
casa51 Messages postés 37 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 18 octobre 2009 - 12 janv. 2009 à 20:28
casa51 Messages postés 37 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 18 octobre 2009 - 19 févr. 2009 à 19:19
bonjour,
voila j'essaye via un ascx que j'appelle dans toutes les pages du site
d'envoyer une valeur
ex : page1.aspx (qui inclu mon controle ascx) envoie vers page2.aspx

mon controle ascx :


---------------------------------------------------------------

"type_asso" runat="server" CssClass="menu-recherche"> "0"Text="asso">
"ARIEGE"Text="cine">

"server" id="ImageButton1" PostBackUrl="~/page2.aspx" ImageUrl="asso-photos/commun/btn-recherche.gif">

-----------------------------------------------------------------
ma page : page2.aspx
dans le code behind
-----------------------------------------------------------------

ProtectedSub Page_Load(ByVal sender AsObject, ByVal e As System.EventArgs)HandlesMe.Load
        IfNot Page.PageIsNothingThen
 
            Dim SourceTextBox As DropDownList
            SourceTextBox = CType(Page.FindControl("type_asso"), DropDownList)
            IfNot SourceTextBox IsNothingThen
                Label1.Text = SourceTextBox.Text
                
            Else
                Label1.Text = "pas de valeur"
            EndIf
endsub
---------------------------------------------------------------------

quand je selectionne une valeur dans mon menu deroulant et que je valide la page
sa me retourne "pas de valeur" la page2.aspx n'arrive pas à récupérer la valeur du module ascx
j'ai pourtant modifier le (Page.PreviousPage par page.page ) mais sa ne marche pas non plus

par contre si je met mes formulaire directement dasn ma page1.aspx et que je valide,  la ma page2.aspx me retourne bien la valeur. je pense que sa viens bien de ma syntaxe de récupération de ma page2.aspx ?

merci de votre aide

16 réponses

SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
13 janv. 2009 à 21:36
N'oublie pas de marquer "Réponse acceptée" si tu penses que ton pb est résolu, ça peut intéresser quelqu'un.
Bonne route

SuperBouly
3
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
19 févr. 2009 à 18:01
Bonjour,

Si je comprends bien ce que tu fais, c'est parce que, lorsque tu travailles seulement dans ta page resultat.aspx, tu n'as pas accès à cette même page, lors du postback, avec page.previouspage (puisqu'il s'agit de la même page, et non de deux pages différentes).
Tu dois donc chercher ton contrôle simplement avec page.findcontrol. Tu peux donc différencier la recherche du contrôle, selon que la page est postback (if page.ispostback then...) ou selon qu'il y a une previouspage.

GGtry
3
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
13 janv. 2009 à 00:03
Bonsoir,

Je ne connais rien aux ascx.
page.page ne peut pas marcher en tout cas (enfin, je ne vois pas comment cela pourrait marcher).
Tu fais apparemment un copier/coller de ton dernier essai...
Mais, est-ce que tu as essayé avec :
sourcetextbox=ctype(page.previouspage.findcontrol("type_asso"), dropdownlist) ?
(page.findcontrol ne peut que chercher dans la page actuelle, pas dans celle qui est à l'origine du postback, cela paraît donc être la cause immédiate pour laquelle ton contrôle est nothing dans ta deuxième page...)

GGtry
0
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
13 janv. 2009 à 08:45
bonjour,
tu peux faire déjà une propriété du genre (en vb.net) :

Public
Property Selection ()
As
String
Get
_Selection =maDropDownList.SelectedValue
Return _Selection

End
Get
Set(
ByVal value
As
String)
_Selection = value
maDropDownList.SelectedValue=_Selection

End
Set
End
Propertyet ensuite déclarer un évènement ClickBouton
Public Event ClickBouton()

enfin dans la sub

Protected
Sub monBouton_Click(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)
Handles monBouton.Click

RaiseEvent ClickBouton()

End
Subtu pourras alors récupérer la valeur dans ta page principale à
Private sub MonUserControl1_ClickBouton (s as...) Handles monUserControl1.ClickBouton
MavaleurRecoltee=MonUserControl1.Selection

end sub
SuperBouly
0

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

Posez votre question
casa51 Messages postés 37 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 18 octobre 2009
13 janv. 2009 à 09:38
merci de votre aide
j'ai essayer comme tu mettais




--------------------------------------------------------------------
If





Not

Page.PreviousPage


Is





Nothing





Then










Dim

SourceTextBox


As

DropDownListSourceTextBox =



CType

(Page.PreviousPage.FindControl(


"type_asso"

), DropDownList)



If





Not

SourceTextBox


Is





Nothing





Then


Label1.Text = SourceTextBox.Text








Else


Label1.Text =





"pas de valeur"








End





If








End





If
--------------------------------------------------------------------
1 / deja pas d'erreur
2/ par contre j'ai toujours mon label a "pas de valeur" donc il ne recoit rien de mon ascx

je crois que le probleme viens de l'ascx

voila le code de mon ascx
il n y a pas de code behind

------------------------------------------------------------------------
<%

@
Control
Language="VB"
ClassName="WebUserControl2" %>
<

asp:DropDownListid="type_asso"runat="server"CssClass="menu-recherche">

<asp:ListItem
Value="0"
Text="Types asso"></asp:ListItem>

<asp:ListItem
Value="1"
Text="cine"></asp:ListItem>

</asp:DropDownList>

<asp:ImageButton
runat="server"
id="ImageButton1"
PostBackUrl="~/recherche.aspx"
ImageUrl="photos/commun/btn-recherche.gif"></asp:ImageButton>

------------------------------------------------------------------------------

manque t'il quelque chose ?

quand je met directement ce dropdownlist dans une page avec cette forme

-------------------------------------------------------------------------------
<

formid="form1"runat="server">

<asp:DropDownList
id="type_asso"
runat="server"
CssClass="menu-recherche">

<asp:ListItem
Value="0"
Text="Types asso"></asp:ListItem>

<asp:ListItem
Value="1"
Text="cine"></asp:ListItem>

</asp:DropDownList>

<asp:Button
ID="Button1"
runat="server"
Text="Button"
PostBackUrl="~/test-postback/dest.aspx"
/>

</form>

-----------------------------------------------------------------------------------
la sa marche nikel !!!
vais regarder le code  de superbouly
merci encore de votre aide
0
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
13 janv. 2009 à 09:57
je viens de regarder à nouveau ton post :
Si tu changes de page (page1 --> page2) le controle utilisateur est rechargé, et donc c'est absolument normal que rien ne soit envoyé.
Il faut, pour utiliser le code que j'ai proposé, rester sur la même page. Au fait, pourquoi changes-tu de page? Tu peux peut-être inclure ton controle dans une masterPage.

SuperBouly
0
casa51 Messages postés 37 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 18 octobre 2009
13 janv. 2009 à 10:42
merci super bouly
ben je coomence a developper en dotnet je viesn de l'asp 3.0 je n'ai pas forcement les bon reflexes....
j'ai commencer à developper ce site d'asso avec un ascx (barre de nav) un ascx (bas de page) et un ascx (moteur de recherche) j 'ai calcer ma facon de travailler comme je faisait en asp avec les include. Enfet j'ai pas trop accrocher avec les masterpages. (faudra bien que je my mette un jour..)
vais essayer ta methode par contre excuse moi mais j'ai pas tout capter

quand tu dit :

tu peux faire déjà une propriété du genre (en vb.net) :

PublicProperty Selection () As
String
Get
_Selection = maDropDownList.SelectedValue

Return _Selection
EndGet
Set(ByVal value AsString)
_Selection = value
maDropDownList.SelectedValue=_Selection
End
Set
EndPropertyet ensuite déclarer un évènement ClickBouton
Public Event ClickBouton()

c'est dans mon ascx ?
---------------------------------------------------------
 et apres

ProtectedSub monBouton_Click(ByVal sender AsObject, ByVal e As System.EventArgs) Handles monBouton.Click
RaiseEvent ClickBouton()
EndSub

toujours dans l'ascx ?

tu pourras alors récupérer la valeur dans ta page principale à

Private sub MonUserControl1_ClickBouton (s as...) Handles monUserControl1.ClickBouton
MavaleurRecoltee =MonUserControl1.Selection

end sub

dans ma page2.aspx ?

j'ai trouvé sa aussi :
http://www.velocityreviews.com/forums/t119904-postbackurl-and-retrieving-values-from-user-controls.html
ou le gas lui conseille :

"It is because there is no previous page when doing the search from the
current page. All you need to do is change your call from
PreviousPage.Master to Page.Master to find your control.
"
merci encore de ton aide.
0
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
13 janv. 2009 à 11:01
Public Property et Protected Sub sont dans l'ascx
la page principale est la page dans laquelle tu veux récupérer la valeur

Utiliser une masterpage est extrèmement facile. Lances toi, tu ne peux pas le regrretter!
Utilises-tu VS 2005 ou 2008 ?

SuperBouly
0
casa51 Messages postés 37 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 18 octobre 2009
13 janv. 2009 à 12:14
prochain site je teste les master page.
j'utilise en design expression web 2.0
et en prog visual 2008
le combo est super  !!!
sa me change de dreamweaver.

je teste ta methode.
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
13 janv. 2009 à 12:19
Bonjour,

Concernant le findcontrol, as-tu essayé de récupérer d'abord ton usercontrol, puis ta dropdownlist à l'intérieur de celui-ci ?
J'ai fait un essai en mettant un usercontrol dans une page (avec un textbox et une ddl dedans) et j'arrive à récupérer sur la deuxième page la ddl ou le textbox contenus dans l'usercontrol en faisant cela :
(nb, en mettant <%@ Register Src="WebUserControl.ascx" TagName="WebUserControl" TagPrefix="uc1" %> sur les deux pages)

Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        If Not Page.PreviousPage Is Nothing Then
            Dim uc As WebUserControl = CType(Page.PreviousPage.FindControl("WebUserControl1"), WebUserControl)
            Dim tb As TextBox = CType(uc.FindControl("TextBox1"), TextBox)
            Dim ddl As DropDownList = CType(uc.FindControl("DropDownList1"), DropDownList)
            Label1.Text = ddl.SelectedItem.Text
        End If
    End Sub

GGtry
0
casa51 Messages postés 37 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 18 octobre 2009
13 janv. 2009 à 15:30
encore moi ouinnnnnnnnnn
voila j'essaye comme toi je prend 2 page vierge et un webusercontrol (code behind vs2008)

default3.aspx
default4.aspx
WebUserControl.ascx

fichier WebUserControl.ascx :
------------------------------------------
<%

@
Control
Language="VB"
AutoEventWireup="false"
CodeFile="WebUserControl.ascx.vb"
Inherits="test_postback_WebUserControl" %>

<asp:TextBox
ID="TextBox1"
runat="server"></asp:TextBox>

<asp:Button
ID="Button1"
runat="server"
Text="Button"
PostBackUrl="~/test-postback/Default4.aspx"
/>
-------------------------------------------

code behinfd rien

fichier default3.aspx :
-------------------------------------------
<%

@

Page
Language="VB"
AutoEventWireup="false"
CodeFile="Default3.aspx.vb"
Inherits="test_postback_Default3" %><%

@
Register
Src="WebUserControl.ascx"
TagName="WebUserControl"
TagPrefix="uc1" %>
<!

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
runat="server">

<title>Page sans titre
</title></

head><

body>

<form
id="form1"
runat="server">

<div>

<uc1:WebUserControl
id="WebUserControl1"
runat="server"
/>

</div>

</form></

body></

html>
--------------------------------------------------------------------
code behind rien

fichier default4.aspx :
--------------------------------------------------------------------
<%

@
Page
Language="VB"
AutoEventWireup="false"
CodeFile="Default4.aspx.vb"
Inherits="test_postback_Default4" %><%

@
Register
Src="WebUserControl.ascx"
TagName="WebUserControl"
TagPrefix="uc1" %>
<!

DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><

htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>Page sans titre
</title>
</head>
<body>
<form
id="form1"
runat="server">
<div>
<uc1:WebUserControl
id="WebUserControl1"
runat="server"
/>
<asp:Label
ID="Label1"
runat="server"
Text="Label"></asp:Label>
</div>
</form>
</body>
</html>
---------------------------------------------------------------------------------
codebehind

----------------------------------------------------------------------------------
Imports

System
Imports

System.Data
Imports

System.Configuration
Imports

System.Collections
Imports

System.Web
Imports

System.Web.Security
Imports

System.Web.UI
Imports

System.Web.UI.WebControls
Imports

System.Web.UI.WebControls.WebParts
Imports

System.Web.UI.UserControl
Imports

System.Web.UI.HtmlControls
Imports

System.Data.OleDb
Imports

System.Data.SqlClient
Partial

Class test_postback_Default4

Inherits System.Web.UI.Page

Private
Sub Page_Load(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)

If
Not Page.PreviousPage
Is
Nothing
Then

Dim uc
As WebUserControl =
CType(Page.PreviousPage.FindControl(
"WebUserControl1"), WebUserControl)

Dim tb
As TextBox =
CType(uc.FindControl(
"TextBox1"), TextBox)Label1.Text = tb.Text

End
If

End
SubEnd

Class
-------------------------------------------------------------------------------------

quand je valide mon formulaire ascx dans page3 j'arrive sur page4.aspx et la
erreur : BC30002: Type 'WebUserControl' non défini.

il ne reconnais pas la commande webusercontrol

je vais y arriver  je suis un peux lent mais bon.....
merci de votre aide
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
13 janv. 2009 à 16:24
Salut,

Essaie avec "usercontrol" plutôt que ce que j'avais mis (le truc avec webusercontrol était idiot...) :

Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.PreviousPage Is Nothing Then
            Dim uc As UserControl = CType(Page.PreviousPage.FindControl("WebUserControl1"), UserControl)
            Dim tb As TextBox = CType(uc.FindControl("TextBox1"), TextBox)
            Label1.Text = ddl.SelectedItem.Text
        End If
    End Sub

GGtry
0
casa51 Messages postés 37 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 18 octobre 2009
13 janv. 2009 à 17:33
YYAAAAAAAAAAAAAAAAAAAAAAAAAAAA
sa marche putain que je suis content !!!!
merci pour tout a vous 2

cool bon je vais aller plus loing pour donner a manger a mon dataset.....
merci encore
0
casa51 Messages postés 37 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 18 octobre 2009
19 févr. 2009 à 17:27
bonsoir,
encore moi
j'ai un petit souci que je ne pige page
voila je resume la situation j'ai 4 pages qui utilise toutes un controle d'utilisateur qui contient des un déroulant "petit moteur de recherche" qui un fois valider envoi une valeur dans la page recherche.aspx

voila le code (mon code behind est vide) :

-------------------------------------------------------------------

 -------------------------------------------------------------------

Ma page resultat.aspx récupere la valeur avec cette methode

code behind de la page resultat.aspx.
-------------------------------------------------------------------




Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load



controletransok()



End Sub



Public Sub controletransok()



If Not Page.PreviousPage Is Nothing Then



Dim uc As UserControl = CType(Page.PreviousPage.FindControl("menugauche1"), UserControl)



Dim strprix As DropDownList = CType(uc.FindControl("cine"), DropDownList)



reste du code de traitement .....................



-------------------------------------------------------------------

voila mon probleme quand j'utilise le controle d'utilisateur dans les page 1 - 2 - 3 - 4 tout marche nikel
ma page resultat.aspx retrouve bien mes données par contre quand j'utilise ce controle DANS la page resultat.aspx (il est aussi présent dedans)
 la par contre il trouve rien dans le previouspage !
je trouve pas la soluce .

merci de votre aide
0
casa51 Messages postés 37 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 18 octobre 2009
19 févr. 2009 à 18:48
coolll
je teste desuite
merci gg
0
casa51 Messages postés 37 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 18 octobre 2009
19 févr. 2009 à 19:19
sa marche nikel !!
0
Rejoignez-nous