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 :

Texte dans page aspx à passer en paramètre dans un webservice


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 39
    Points : 22
    Points
    22
    Par défaut Texte dans page aspx à passer en paramètre dans un webservice
    Bonjour,

    J'ai quelques problèmes en asp.net, c'est un langage assez nouveau pour moi.

    Je souhaite faire une page assez simple, du type

    <Titre de la page>

    <Titre du texte 1>
    <Contenu du texte 1>
    <Bouton 1>

    <Titre du texte 2>
    <Contenu du texte 2>
    <Bouton 2>

    <Titre du texte 3>
    <Contenu du texte 3>
    <Bouton 3>

    Je voudrais qu'en cliquant sur le bouton i, j'appelle un webservice qui retourne un résultat (disons un string) dépendant du texte i. Et qu'une fenêtre popup s'ouvre, affichant le titre du texte i ainsi que le résultat retourné.

    Jusqu'à maintenant, à la place des textes j'avais un seul objet asp:TextBox dont je récupérais simplement la valeur par TextBox.Text dans ma_page.aspx.cs. Donc c'était facile.
    Maintenant, le fait que je remplace ça par un texte (qui est pour l'instant dans une balise html type <div> ou <span>) me complique les choses car je ne sais pas comment récupérer la valeur dans le .cs

    C'est une simple page que je fais uniquement pour une demo, donc peu importe que les textes soient écrits en dur dans la page aspx.

    J'ai l'impression d'avoir plusieurs solutions qui s'offrent à moi.

    - trouver un objet asp, une balise ou qqch dans quoi je mettrai mes titres & contenus dans la page aspx, afin de pouvoir les récupérer comme paramètres dans mon cs quand je clique sur le bouton (je sais pas si c'est clair, j'espère que oui)

    - mettre les titres et contenus dans le web.config pour pouvoir les récupérer avec un ConfigurationManager.AppSettings...
    * chiant à faire, notamment devoir remplacer les caractères spéciaux comme les ";
    * rien trouvé de mieux pour l'instant que les objets Label (<asp:Label id="LblTitre1" runat="server" __designer:wfdid="w12" Text="Label1"></asp:Label>), ce qui ne me semble pas le plus propre;
    * et d'ailleurs ça me fait un NullReferenceException sur le Label:
    Object reference not set to an instance of an object.
    que je n'ai pas comprise.

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    string _TITLE_1;
    string _CONTENT_1;
     
    public _Default()
    {
    	_TITLE_1 = ConfigurationManager.AppSettings["Title_1"];
    	_CONTENT_1 = ConfigurationManager.AppSettings["Content_1"];
     
    	// Créé 2 labels sur ma page aspx, et je veux les remplir avec les valeurs dans le web.config
     
    	LblTitre1.Text = _TITLE_1; // >> NullReferenceException
    	LblContenu1.Text = _CONTENT_1;
    }


    - utiliser un javascript, ce qui parait-il serait le mieux... mais je n'en ai jamais fait.

    merci d'avance pour vos infos et désolé encore pour cette énième question.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 360
    Points : 486
    Points
    486
    Par défaut
    j'ai un peu du mal a comprendre...
    mais as tu créer ton webservice ? est ce qu'il renvoi la bonne valeur ?

    jjameau

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 39
    Points : 22
    Points
    22
    Par défaut
    Ok je me suis relu, et c'est imbitable

    Je vais simplifier mon problème en posant les questions une par une.

    Jusqu'ici, j'avais un asp:textbox et un bouton.

    Code default.aspx : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <asp:TextBox id="MonTexte" runat="server" __designer:wfdid="w2" Rows="10" Width="1000px" TextMode="MultiLine">
    <asp:Button id="MonBtn" onclick="MonBtn_Click" runat="server" __designer:wfdid="w15" />

    En cliquant sur ce bouton, ça appelle dans le cs une fonction MonBtn_Click, qui appelle un webservice. Le texte de ma page asp est en paramètre de ce webservice.

    Code default.aspx : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    protected void MonBtn_Click(object sender, ImageClickEventArgs e)
    {
      // fait des trucs
      string ma_reponse = <mon_client_webservice>.<mon_webservice>((MonTexte.Text.Trim());
      // fait des trucs
     
    }

    Mon webservice est créé, et marche apparemment bien. donc tout ça marchait.

    Maintenant je veux une page avec plusieurs textes, et plusieurs boutons associés.

    texte1
    bouton1

    texte2
    bouton2

    etc...

    et donc je me dis que :

    - soit je fais un copier-coller de tout ça en faisant une fonction par bouton
    - soit j'ai un moyen d'utiliser la seule fonction MonBtn_Click, et je trouve le moyen d'ajouter un paramètre (mon texte). Comme ça il continuera à appeler mon webservice, mais avec le texte correspondant au bouton sur lequel j'ai cliqué.

    Donc c'est TRES simple comme problème, pour quelqu'un qui s'y connait. (donc pour moi c'est pas simple du tout )

    voila

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 360
    Points : 486
    Points
    486
    Par défaut
    tu peux faire comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim b As Button
            b = CType(sender, Button)
            Dim s As String = b.CommandArgument
            Dim t As TextBox
            t = CType(Me.Page.FindControl(s), TextBox)
        End Sub
    il faut que tu passe un CommandArgument a ton boutton avec pour valeur l'ID du textbox associé

    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Button ID="Button2" runat="server" CommandArgument="id_txtbox" Text="test" /></div>
    ps: pense aussi a rajouter controle d'erreur si tu ne trouve pas ton controle dans la page

    jjameau

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 360
    Points : 486
    Points
    486
    Par défaut
    pas fais attention mais mon ex est en vb.net

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 39
    Points : 22
    Points
    22
    Par défaut
    pas de souci, même si je ne maîtrise pas le VB j'ai saisi l'idée.

    Donc comme tu l'expliquais, il suffisait de :

    - remplacer dans la balise button le onclick par un oncommand;
    - ajouter commandargument="<mon_argument>" dans cette même balise;
    - de même pour le commandname (ça ne semble pas obligatoire, je l'ai fait quand même par "souci de propreté")
    - dans le .aspx.cs, remplacer le paramètre eventargs de la fonction MonBtn_Click(object sender, trucmucheClickEventArgs e) par MonBtn_click(object sender, CommandEventArgs e)
    - et hop, après il me suffit de faire un switch sur la valeur de e.CommandArgument.ToString() et/ou e.CommandName, pour en faire ce que je veux.

    Merci beaucoup d'avoir pris le temps de répondre, même si comme d'habitude le niveau de mes questions ne vole pas haut

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 360
    Points : 486
    Points
    486
    Par défaut
    - remplacer dans la balise button le onclick par un oncommand;
    - ajouter commandargument="<mon_argument>" dans cette même balise;
    - de même pour le commandname (ça ne semble pas obligatoire, je l'ai fait quand même par "souci de propreté")
    - dans le .aspx.cs, remplacer le paramètre eventargs de la fonction MonBtn_Click(object sender, trucmucheClickEventArgs e) par MonBtn_click(object sender, CommandEventArgs e)
    - et hop, après il me suffit de faire un switch sur la valeur de e.CommandArgument.ToString() et/ou e.CommandName, pour en faire ce que je veux.
    il te faut juste :
    - Définir un commandargument au niveau de ton bouton
    - Caster le sender en button dans l'évènement de ton bouton
    - Récupérer le CommandArgument de ton bouton ainsi casté
    - Trouver le control dont l'ID=CommandArgument
    - Le caster en Textbox et tu pourras récupérer sa valeur.

    Si tu as plusieurs boutons pensent aussi à les abonner au même événement

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 39
    Points : 22
    Points
    22
    Par défaut
    Je suis pas sur d'avoir compris tous les mots ("caster le sender" )

    Mais je pense avoir fait à peu près ce qu'il fallait...

    Code default.aspx : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <asp:ImageButton id="Btn1" oncommand="MonBtn_Click" commandname="MaCommande" commandargument="1" runat="server" __designer:wfdid="w15" imageurl="~/bouton.gif" />
    (...)
    <asp:ImageButton id="Btn2" oncommand="MonBtn_Click" commandname="MaCommande" commandargument="2" runat="server" __designer:wfdid="w15" imageurl="~/bouton.gif" />
    (...)
    <asp:ImageButton id="Btn3" oncommand="MonBtn_Click" commandname="MaCommande" commandargument="3" runat="server" __designer:wfdid="w15" imageurl="~/bouton.gif" />

    et pis

    Code defalult.aspx.cs : 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
    protected void MonBtn_Click(object sender, CommandEventArgs e)
            {
                try
                {
                    // Vérification de la commande du bouton
                    if (e.CommandName != "MaCommande")
                    {
                        throw new Exception("Ce bouton est réservé à une commande \"MaCommande\" ");
                    }
     
                    // Paramètre du bouton
                    string text = "";
                    switch (e.CommandArgument.ToString())
                    {
                        case "1":
                            (...) // fait ce que je lui demande avec 1 en param
                            break;
                        case "2":
                            (...) // ... 2
                            break;
                        case "3":
                            (...) // ... 3
                            break;
                        default:
                            throw new Exception("y'a pas");
                            break;
                    }
                }
                catch (Exception ex)
                {
                    LblMsgErreur.Text = ex.Message + " (t'as fait nainwak)";
                }
            }

    Ca a l'air de marcher. J'ai rien oublié? Ca va pas me péter à la face dans ce petit cas de figure que j'y avais pas pensé comme un gros nul?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 360
    Points : 486
    Points
    486
    Par défaut
    ca m'a l'air pas mal, tu a mis quoi du coup dans tes case i ?

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 39
    Points : 22
    Points
    22
    Par défaut
    chaque bouton est placé sous une textbox qui contient un certain texte. Dans mes case i j'ai appelé le webservice que j'utilise en mettant le contenu de la textbox i en parametre, puis après le switch je retourne le résultat dans un label de la page.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 360
    Points : 486
    Points
    486
    Par défaut
    et du coup ca fonctionne ?

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 39
    Points : 22
    Points
    22
    Par défaut
    J'ai retesté, ça a l'air oui. Ca m'embête parce que j'ai du utiliser des objets asp:textbox pour pouvoir récupérer ces textes - qui sont en dur dans la page aspx - puis bidouiller derriere (cadre invisible, readonly) pour "cacher" que c'est une textbox (mais pas moyen d'enlever la scrollbar verticale, du moins les fleches.

    (#1) Titre 1 (asp:label)
    Texte 1 (asp:textbox)
    Bouton 1 (asp:button)

    (#2) Titre 2 (asp:label)
    Texte 2 (asp:textbox)
    Bouton 2 (asp:button)

    ...

    Je me demandais si il n'y avait pas moyen de récupérer ces textes avec un paramètre dans une balise html (pas trouvé d'objet asp qui conviendrait, mais si ça existe ce serait tres bien), genre
    <div id="mon_div_1" ... >bla bla bla</div>
    et que dans le cs je puisse récupérer "bla bla bla" avec une commande type
    mon_div_1.text

    Du coup j'ai un truc moche. Mais ça semble marcher.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 360
    Points : 486
    Points
    486
    Par défaut
    avec un panel, ca ne ferait pas l'affaire ?

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 39
    Points : 22
    Points
    22
    Par défaut
    Je ne crois pas. J'avais également pensé au panel, mais le problème est qu'il n'y a pas d'attribut Text. Apparemment un panel sert à gérer de façon groupée les autres objets (asp ou balises) contenues dans le panel, donc ce n'est pas vraiment cela que je recherche. Je ne peux pas me contenter d'un objet Label, car mon texte comporte des sauts de ligne (or apparemment les labels ne supportent pas les multilignes). Du coup mon texte, typiquement un article de journal, a des paragraphes et tout alors qu'avec un label tout se suit sans passer à la ligne.

    Ou bien alors, peut-être il y a un moyen de mettre le texte comme cela dans la page

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Panel id="MonPanel" runat="server" __designer:wfdid="w1" Width="1000px">mon texte</asp:Panel>
    et de savoir le récupérer ensuite dans mon cs.

    J'ai cherché un peu sur le net et je suis tombé sur ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LiteralControl objPanelText = MonPanel.Controls[0] as LiteralControl;
    objPanelText.Text = "texte modifé";
    qui marche, mais qui comme l'objet asp:label, ne prend pas en compte les sauts de ligne. J'ai cru que j'allais pouvoir faire mon malin, eh bien non c'est encore raté

    Voilà pourquoi je n'ai pas trouvé mieux que le textbox pour le moment.

Discussions similaires

  1. Passer plusieurs paramètres dans un callback (débutant!)
    Par pilouface dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 07/02/2007, 20h42
  2. applet java dans page ASPX
    Par volivi dans le forum Applets
    Réponses: 1
    Dernier message: 06/11/2006, 21h12
  3. Réponses: 2
    Dernier message: 11/10/2006, 13h37
  4. Réponses: 1
    Dernier message: 21/03/2006, 14h29
  5. Passer un paramètre dans le script
    Par ipeteivince dans le forum Windows
    Réponses: 2
    Dernier message: 02/03/2006, 17h00

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