IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Passage de paramettre


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut Passage de paramettre
    Bonjour,
    j'ai un dropdownlist à l'interieur d'un DataList. Tous les deux lié à une SqlDataSource.
    J'ai également une url qui contient une variable passé en paramétre.
    J'aimerai que la page se recharge quand je change le dropdownlist et que la variable de l'url prend la valeur du dropdownList.

    Je bloque, que dois-je faire?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 10
    Par défaut
    Salut,

    Tu a essayé de mettre la propriété AutoPostBack de ta DropDownList à true?

    Sinon je ne suis pas sur d'avoir compris ta question, mais si tu veux récupérer la valeur selectionnée dans la DDL, tu peux utiliser la propriété SelectedValue pour obtenir sa valeur ou SelectedItemIndex pour récupérer son index.

    L'evènement SelectedIndexChanged est déclenché lorsque l'on change la valeur de la DDL.

    Pense aussi à activer l'état d'affichage (propriété EnabledViewState si je me souviens bien) pour que les valeurs soit gardées lors du rechargement de la page

    plus d'infos :
    http://msdn.microsoft.com/fr-fr/libr...ck(VS.80).aspx

    http://msdn.microsoft.com/fr-fr/libr...rs(VS.80).aspx

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut
    Oui la propriété est déjà à true mais après dans le behind j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    protectedvoid ListModel_SelectedIndexChanged(object sender, EventArgs e)
    {
    Request.QueryString["do"]= ListModel.SelectedItemIndex.Value;
    }
    Mais il ne reconnait pas ListModel qui est l'ID de mon DropDownList.
    La variable dans l'URL est "do".
    Ce que je voulais expliquer dans mon premier message c'est que dans l'affichage d'un DataList je rajoute un DropDownList qui est lié à sa propre SqlDataSource. Alors je me demande si il y un problème de portabilité dans ce cas

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 10
    Par défaut
    erf ouai j'ai eu le même problème aussi,

    Normalement tu doit pouvoir régler le problème simplement avec du code asp, mais je n'ai jamais trouvé comment.

    Asp.net crée un espace de nom pour chaque controle, ca veut dire que quand tu veux récupérer l'id de ta DDL, il ne la trouve pas dans la page, car elle se trouve dans une cellule de ta DataGrig, et non dans la page, asp trouve bien ton DataGrid Dans la page, mais pas les controles qui se trouvent dans le DataGrid

    Je ne sais pas comment ca fonctionne avec le DataGrid, mais avec un GridView, tu peu faire comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    protected void GridView_SelectedItemChanged(object sender, GridViewUpdateEventArgs e)
    {
    DropDownList MonDDL = (DropDownList)MonGridView.Rows[e.RowIndex].Cells[2].FindControl("ListModel");
    MaValeur = MonDDL.SelectedValue;
     
    }
    (Cells[2] permet d'accéder à la troisième colonne, il faut mettre l'index de la colonne ou se trouve ta DDL )
    e.RowIndex indique l'index de la ligne ou la modification à été effectuée.

    Par contre je doute que tu puisse modifier l'objet Request, d'ailleurs la doc d'msdn indique "Obtient la collection des variables chaîne de requête HTTP " et non "obtient ou défini".

    Lorsqu'un utilisateur envoie une requete a ton serveur, le serveur ecrit un objet HttpResponse correspondant à cette requete (si on envoie http://monsite/mesphotos.aspx alors on écrit la page des photos dans l'objet response ) et le renvoie au client, tout ce que tu code ensuite dans se produit entre ses 2 evènements.

    Donc si ton utilisateur t'envoie une requete, l'objet Request auquel tu accède dans ta page représente la requête mais ne peut pas (ne doit pas) etre modifié, c'est la requete que t'envoie l'utilisateur, tu ne peut pas la modifier.

    tu peu par contre modifier la page de destination avec

    Response.Redirect("http://monsite.com/?do=" + MaValeur, true);

    C'est a dire que tu redirige ton utilisateur vers une nouvelle url, true indique que l'execution de la page doit s'arreter et rediriger immediatement, si tu met false le cycle de vie de ta page sera effectué avant la redirection.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut
    Bonjour, j'ai suivi ton conseil :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    publicstring lareference;
     
    protectedvoid ListModel_SelectedIndexChanged(object sender, EventArgs e)
    {
    DropDownList MonDDL = (DropDownList)DataFicheArticle.FindControl("ListModel");
    lareference = MonDDL.SelectedItem.Value.ToString(); //ligne 41
    Response.Redirect("http://article.aspx?do=" + lareference, true); 
    }
    
    
    Et j'ai le message d'erreur suivant :
    L'exception System.NullReferenceException n'a pas été gérée par le code utilisateur
    Message="La référence d'objet n'est pas définie à une instance d'un objet."
    Source="App_Web_8253p89z"
    StackTrace:
    à article.ListModel_SelectedIndexChanged(Object sender, EventArgs e) dans d:\Mes Documents\Visual Studio 2008\WebSites\kiki\article.aspx.cs:ligne 41

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 10
    Par défaut
    EffectivementLa DataList ne semble pas fonctionner comme le gridView a ce niveau la


    FindControl te renvoie null si il ne trouve pas le controle, si tu cherche ensuite à acceder à une propriété d'une valeur null, l'exception NullReferenceException est gérée.

    Commence par verifier que le controle est trouvé (soit le controle est reference null, soit c'est la propriété selectedvalue qui l'est, alors c'est l'appel de tostring qui genere une exception) en inserant la ligne suivante apres le findControl :

    if(MonDDL != null)
    {
    System.Windows.Forms.MessageBox.Show("DDl introuvable");
    } else ....


    Sinon tu a mis quoi coté asp?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut
    J'ai suivi l'intellisence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    <asp:SqlDataSourceID="dsFiche"runat="server"ConnectionString="<%$ ConnectionStrings:csOmdafer %>"SelectCommand="SELECT [article_numero], [article_reference], [article_design], [article_description], [article_photo2], [article_prix], [article_ioffre], [article_textoffre] FROM [article] WHERE ([article_numero] = @article_numero)"onselected="dsFiche_Selected">
    <SelectParameters>
    <asp:QueryStringParameterName="article_numero"QueryStringField="do"Type="Int32"/>
    </SelectParameters>
    </asp:SqlDataSource>
     
    <asp:SqlDataSourceID="dsTaille"runat="server"ConnectionString="<%$ ConnectionStrings:csOmdafer %>"SelectCommand="SELECT [stock_taille], [stock_id] FROM [stock] WHERE (([stock_article] = @stock_article) AND ([stock_nombre] &gt; @stock_nombre))">
    <SelectParameters>
    <asp:QueryStringParameterName="stock_article"QueryStringField="do"Type="Int32"/>
    <asp:ParameterDefaultValue="0"Name="stock_nombre"Type="Int32"/>
    </SelectParameters>
    </asp:SqlDataSource>
     
    <asp:DataListID="DataFicheArticle"runat="server"DataSourceID="dsFiche"onselectedindexchanged="DataFicheArticle_SelectedIndexChanged">
    <ItemTemplate>
    <%# Eval("article_photo2") %>
    ......
    <%# Eval("article_design") %> 
    ........
     
    <%# Eval("article_description") %>
     
    ...........
     
    <%# Eval("article_reference")%>
     
    .........
     
    <%# Eval("article_ioffre") %>
     
    <%# Eval("article_prix")%> € <%# Eval("article_textoffre")%>
     
    ......
     
    <%# Eval("article_numero") %>
     
    ......
    
    Taille 
    <asp:DropDownListID="ListdeTaille"runat="server"AutoPostBack="True"DataSourceID="dsTaille"DataTextField="stock_taille"DataValueField="stock_id"onselectedindexchanged="ListdeTaille_SelectedIndexChanged">
    </asp:DropDownList>
    
    .....
    
    Model <asp:DropDownListID="ListModel"runat="server"DataSourceID="dsLstModel"AutoPostBack="True"DataTextField="article_model"DataValueField="article_numero"Font-Size="Small"onselectedindexchanged="ListModel_SelectedIndexChanged">
    </asp:DropDownList>
     
    .....
     
    <asp:SqlDataSourceID="dsLstModel"runat="server"ConnectionString="<%$ ConnectionStrings:csOmdafer %>"SelectCommand="SELECT [article_numero], [article_model] FROM [article] WHERE ([article_reference] = @article_reference)">
    <SelectParameters>
    <asp:ControlParameterControlID="refarticle"Name="article_reference"Type="String"/>
    </SelectParameters>
    </asp:SqlDataSource>
    
    ......
     
    
    </ItemTemplate>
    </asp:DataList>
    
    Sinon ce n'est pas plutot

    if(MonDDL != null)
    {
    ....
    }
    else System.Windows.Forms.MessageBox.Show("DDl introuvable");

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 10
    Par défaut
    Chez moi ca marche avec ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    protected void ListModel_SelectedIndexChanged(object sender, EventArgs e)
    		{
    			Response.Redirect("http://www.monsite/?do=" + ListModel.SelectedValue.ToString());
    		}

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut
    Non moi j'ai une erreur :

    Le nom 'ListModel' n'existe pas dans le contexte actuel
    tu as bien essayé avec DDL et sa SqlDS entre les balises <ItemTemplate> du DataList ?

    C'est bizarre quand même.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 10
    Par défaut
    Meme avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    protected void ListModel_SelectedIndexChanged(object sender, EventArgs e)
    		{
     
    			DropDownList MaListe = (DropDownList) sender;
    Response.Redirect("http://www.monsite/?do=" + MaListe.SelectedValue.ToString());
    		}
    ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut
    tu as bien essayé avec DDL et sa SqlDS entre les balises <ItemTemplate> du DataList ?

    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DropDownList MaListe = (DropDownList)sender;
    Response.Redirect("article.aspx?do=" + MaListe.SelectedValue.ToString());
    
    Pas d'erreur, mais la variable do reste à la valeur DDL après une première selection


  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 10
    Par défaut
    J'ai garde que la DDL et jai mis mon provider et bien sur une requete qui marche sur ma base

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <asp:DataListID="DataFicheArticle" runat="server" onselectedindexchanged="DataFicheArticle_SelectedIndexChanged">
    <ItemTemplate>
     
    Model <asp:DropDownList ID="ListModel" runat="server" DataSourceID="dsLstModel" AutoPostBack="True" DataTextField="nom" DataValueField="id_page" Font-Size="Small" OnSelectedIndexChanged="ListModel_SelectedIndexChanged">
    </asp:DropDownList>
     
     
    <asp:SqlDataSource ID="dsLstModel" runat="server" ConnectionString="<%$ ConnectionStrings:PgsqlLocalServer %>" SelectCommand="SELECT nom, id_page FROM pages" providerName="Npgsql">
    <%-- SelectParameters>
    <asp:ControlParameterControlID="refarticle"Name="article_reference"Type="String"/>
    </SelectParameters --%>
    </asp:SqlDataSource>
     
     
    </ItemTemplate>
    </asp:DataList>
    Mais je vois pas de raison pour qu'un autre controle dans l'itemTemplate cause le problème

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut
    C'est bon avec le "sender".
    Le petit bug qui se produit maintenant c'est qu'il me met toujour la liste dans le même ordre. Donc ce qui fait que si j'ai que 2 élément dans cette liste, je ne peux pas reselectionner celui d'origine.

    Ce serai bien que j'arrive à mettre en premier, l'idem que je viens de selectionner.
    Ou de réussir à rajouter un element "--choisir--" sauf que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    
    <asp:ListItem Selected=True Text="--choisir--" Enabled=true />
    
    ne marche pas.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut
    Ajouter un item à mon DropDownList ne fonctionne pas, est-ce dû au fait qu'il est lié à une SqlDataSource ?
    Ou alors il y a une syntaxe que je ne connais pas.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 10
    Par défaut
    Je comprends pas trop ta question, mais si tu veu ajouter un item dans ta DDL, il faut le faire par la base de données, puisqu'il est relié aux données.

    Sinon tu peu jouer sur la proriété SelectedIndex pour definir l'item sélectionné (desole je comprends pas bien ce que tu veux faire).

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut
    Quand la page se recharge, je souhaite que l'idem selectionné soit en premier. Oui c'est peut être une question de priorité en effet.

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 10
    Par défaut
    J'ai rien vu dans la doc qui permette de modifier l'odre, d'ailleurs si ton controle est relié aux données, c'est le resultat de ta requete select qui conditionne l'ordre d'apparition des items si je me trompe pas.

    Sinon tu peux determiner l'item qui est selectionné en definissant la prorpiété SelectedItemIndex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    protected void ListModel_SelectedIndexChanged(object sender, EventArgs e)
    		{
    			DropDownList MaListe = (DropDownList) sender;
    			Context.Session["ListIndex"] = MaListe.SelectedIndex;
    			Response.Redirect("./?do=" + ListModel.SelectedValue.ToString());
     
    		}
     
     
    		protected void ListModel_Init(object sender, EventArgs e)
    		{
     
    			if(Context.Session["ListIndex"] != null)
    			{
    				DropDownList MaListe = (DropDownList) sender;
    				MaListe.SelectedIndex = (int) Context.Session["ListIndex"];
    			}
    		}
    N'oublie pas de declarer l'evenement OnInit dans la balise asp de ta DDL

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut
    Il me dit qu'il ne peut utiliser qu'une valeur inferieur à l'infini pour la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (int) Context.Session["ListIndex"];
    C'est bizarre quand même, que l'item qu'on selectionne, ne se met pas en idems selectionné quand la page se recharge.

    Ce n'est pas grave j'ai trouvé une alternative : C'est d'ajouter à ma table une ligne bidon qui me permet de rajouter "--choisir--" en item selectionné.

    Merci.

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 10
    Par défaut
    A tu le texte complet de l'erreur et sa ligne?

    Mettre une ligne supplémentaire à ta table n'est pas la bonne solution, si ton utilisateur clique sur choisir, il sera redirigé vers tonsite.com/?do=--choisir--, de plus c'est une très mauvaise idée puisque tu te retrouve avec des champs dans ta table qui ne fonctionnent pas de la même facon

    Pour commencer tu peux definir à true la propriété AppendDataBoundItems de la dropDownList à true, ainsi elle ne sera pas vidée avant une liaison aux données et ajouter un controle LisIem a ta DDL, ca devrai regler ton autre problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Model <asp:DropDownList ID="ListModel" runat="server" DataSourceID="dsLstModel" AutoPostBack="True" AppendDataBoundItems="true" DataTextField="nom" DataValueField="id_page" Font-Size="Small" OnSelectedIndexChanged="ListModel_SelectedIndexChanged" OnInit="ListModel_Init">
    	<asp:ListItem Selected="true" Value="0" Text="Choose"></asp:ListItem>
     
    </asp:DropDownList>
    (J'ai mi Value="0" pour l'exemple avec ma base, il faut bien sur le remettre à ta sauce)

    Puis verifier dans ton code que cette valeur n'est pas choisie avant de rediriger l'utilisateur, ce qui t'evitera de polluer ta table avec des données qui n'ont rien à y faire.

    pour la propriété Enabled de ListItem la doc msdn stipule que :
    "Vous ne pouvez pas utiliser cette propriété pour désactiver un contrôle ListItem dans un contrôle DropDownList ou dans un contrôle ListBox."

    http://msdn.microsoft.com/fr-fr/libr...em(VS.80).aspx

    Tu ne peux dons pas rendre inactif un item de DropDownList, après tout tu peux tout a fait marquer "choisir" devant ta liste, d'ailleurs si tu veux juste indiquer à l'utilisateur de choisir, cette solution sera toujours meilleure que d'ajouter des champs bidons a ta table, c'est à éviter absolument, ca oblige ton application à faire le tri de ce qui lui est destiné, alors que ce n'est pas son rôle.

    Je t'invite à consulter la doc msdn, tu devrai y trouver suffisamment de réponses :

    http://msdn.microsoft.com/fr-fr/libr...rs(VS.80).aspx

    http://msdn.microsoft.com/fr-fr/libr...rs(VS.80).aspx

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Par défaut
    Je vais essayer ce que tu me dis.
    D'après ce que tu dis, je pense que c'est la propriété AppendDataBoundItems qui manquait.
    Je vais également, regarder de près la doc que tu as mis en lien.

    C'est vrai que ce serait bête d'ajouter des lignes bidons dans la BD. ça pollue la table et en plus ça deviens un vrai casse tête pour faire les requêtes.

    Je donnerai un retour à ça.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [WD17] Passage de paramettre RVB
    Par dany13 dans le forum WinDev
    Réponses: 5
    Dernier message: 18/03/2013, 10h37
  2. passage de paramettres Apache -> servlet
    Par omcougar dans le forum Services Web
    Réponses: 0
    Dernier message: 05/10/2008, 12h03
  3. [image & passage de paramettre] Sos svp !
    Par maximus001ma dans le forum JSF
    Réponses: 10
    Dernier message: 23/08/2007, 15h35
  4. Réponses: 6
    Dernier message: 10/06/2007, 13h33
  5. Probleme jsp passage de paramettres
    Par rafounette dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 17/11/2006, 16h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo