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 :

Récupérer valeur d'un input text dynamique


Sujet :

ASP.NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Juin 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Juin 2007
    Messages : 38
    Points : 31
    Points
    31
    Par défaut Récupérer valeur d'un input text dynamique
    Bonjour à tous!

    Je rencontre un problème dans un site que je développe actuellement :

    Je dois générer un tableau indiquant les documents dont les adresses physiques sont enregistrée dans ma BDD, mais n'existent pas là ou ils devraient l'être.

    Jusque la pas de soucis : requete de la liste des "url", verification de l'existance des fichiers (file.exist et file.length!=0).

    je créée un tableau html via un string dans mon C#, et ensuite pour chacun des documents manquants, j'ajoute les info dans le tableau.


    extrait du code c# de ma fonction fillMissingDoc() :
    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
    int i = 0;
    tab = "<table id=table_grid><tr id=tr_grid_ent><td>Titre</td><td>Type document</td><td>Ajouter</td></tr>";
     
    while (reader.Read())
    {
        dest = reader["savedest_document"].ToString();
        docName = reader["titre_document"].ToString();
        typedoc = reader["type_document"].ToString();
        FileInfo file = new FileInfo(dest);
     
        if (!File.Exists(dest) || file.Length == 0)
        {
            FileUpload upl = new FileUpload();
            upl.ID = reader["titre_document"].ToString();
            string fileNameFab = upl.FileName.ToString();
     
            //création du nom de fichier et de son url
            string saveLocation = fileSave + "doc"+typedoc+"\\" + docName;
     
            // upload du fichier sur serveur si renseigné
            if (upl.FileName.ToString() != "")
            {
                try
                {
                    upl.PostedFile.SaveAs(saveLocation);
                }
                catch (DirectoryNotFoundException)
                {
                    System.IO.Directory.CreateDirectory(fileSave + "\\doc"+typedoc);
                    upl.PostedFile.SaveAs(saveLocation);
                }
            }
     
            //inscription de la ligne (css change 1 lig sur 2)
            if ((i % 2) == 0)
            {
                tab += "<tr class='tr_grid_lig1'>";
            }
            else
            {
                tab += "<tr class='tr_grid_lig2'>";
            }
            tab += "<td>" + docName + "</td><td>" + typedoc + "</td><td><input type='file' name='"+upl.ID+"' id='"+upl.ID+"' /></td>";
            tab += "<td style='display:none'><input type='text' value='" + docName + "' id='titre" + i + "' /></td><td style='display:none'><input type='text' value='" + typedoc + "' id='type" + i + "' /></td></tr>";
            i++;
        }
    }
    tab += "</table>";
    oConnexion.Close();
    return tab;
    j'appelle cette fonction dans ma page aspx comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <%
        //On crée une instance de la class Methodes
        Methodes mesMethode = new Methodes();
     
        //On inscrit le tableau qui contient une liste de fichier    
        Response.Write(mesMethode.fillMissingDoc());
    %>





    Le problème : je ne parviens pas a récupérer les valeurs docName et typedoc qui sont inscrites automatiquement dans le tableau (en tant que texte "brut" dans les 2 premieres colones, ainsi que dans les 2 colones en display none étant des input text avec un id précis.

    J'ai essayé Request["titre1"] et Request.Form["titre1"] pour tester, à la fois dans l'aspx et dans le c#, et de les mettre dans un label, mais rien a faire : Request[] me retourne vide dans les 2 cas, et Request.Form retourne vide en aspx, et ne fonctionne pas (erreur de compilation) dans le c#.


    sachant que Request.Form ne possède pas mon tableau en attribut (AllKeys) :
    [0] = "__EVENTTARGET"
    [1] = "__EVENTARGUMENT"
    [2] = "__VIEWSTATE"
    [3] = "__EVENTVALIDATION"
    [4] = "btnUpload"


    btnUpload étant bien entendu le bouton qui valide mon post et me permet de parcourir l'HttpFilecollection afin d'obtenir les fichier des composants UploadFile.



    Si quelqu'un a une solution, même s'il faut refaire le tableau différement, je suis preneur

  2. #2
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Tu veux les récupérer dans le code-behind? en javascript ?
    Si c'est en code-behind, il faudrait ajouter des balises runat="server" sur tes input.

    Tu es obligé de construire ton tableau ainsi ? Tu ne peux pas utiliser une gridview, une listview ou autres ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    Tu va jamais t'en sortir comme ca.

    Utilise des contrôles aspnet que tu place dans ta page aspx (voir GridView ou eventuellement Repeater)

    Ensuite tu les Bind avec tes données, il sera beaucoup plus facile de travailler dessus.

    Essaie d'éviter d'utiliser response.write

    Aussi, la gestion de ta connexion (oConnexion.Close() n'est pas propre, regarde les bonnes pratiques a ce sujet ca pourrait d'éviter des soucis en prod

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Juin 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Juin 2007
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    jbrasselet : J'essaye de les récupérer en code-behind.

    pour le moment, j'essaye déja de le faire apparaitre sur un label : lblErreur.Text= Request.Form["titre1"];

    Ca me rempli "", malgré l'ajout des runat="server" dans mes input




    nah666 : concernant la gridview, j'ai tenté au début, mais j'ai pas réussi a renommer mes noms de colones......

    autant mes gridview qui sont "bindée" a partir d'un composant sqldatasource c'est pas un problème, mais celui la que je facone moi même ligne a ligne, j'ai uniquement "item 1"/"item 2" en nom de colone...



    que veux tu dire pour la gestion de la connexion ? lorsque je fais un datareader (uniquement dans mes select) je gère toujours ainsi.

    je suis pas parvenu a les manipuler comme les insert/update/delete pour lesquels je fais via un dataSet

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    concernant la gridview, j'ai tenté au début, mais j'ai pas réussi a renommer mes noms de colones......
    Il faut que ta source de donnée ait un nom:


    Ceci marche chez moi (désolé c'est du VB)

    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
     
    Partial Class _Default
        Inherits System.Web.UI.Page
     
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not IsPostBack Then
                grid.DataSource = getTestDatas()
                grid.DataBind()
            End If
        End Sub
     
        Private Class myData
            Public Property docName As String
            Public Property title As String
        End Class
     
        Private Function getTestDatas() As List(Of myData)
            Dim ret As New List(Of myData)
            ret.Add(New myData() With {.docName = "docName1", .title = "title1"})
            ret.Add(New myData() With {.docName = "docName2", .title = "title2"})
            Return ret
        End Function
     
    End Class
    J'ai bien une grid avec comme titre de colonne docName et title .

    Tu peux aussi choisir de renommer les colonnes pour surcharger (placer alors l'attribut AutoGenerateColumns="false"):

    <asp:GridView ID="grid" runat="server" AutoGenerateColumns="false" >
    <Columns>
    <asp:BoundField HeaderText="DOCUMENT NAME" DataField="docName" />
    <asp:BoundField HeaderText="TITRE" DataField="title" />
    </Columns>
    </asp:GridView>
    que veux tu dire pour la gestion de la connexion ? lorsque je fais un datareader (uniquement dans mes select) je gère toujours ainsi.
    Tu dois fermer ta connexion quoi qu'il se passe sinon (exception par exemple) elle peut rester ouverte avec les problèmes que ca engendre :

    http://www.csharp-station.com/Tutori.../Lesson02.aspx

    Mais il y a 150 000 tutos la dessus sur le net

    Aussi j'ajouterai que la responsabilité d'ouvrir et de fermer la connexion, de récupérer les données, et enfin de préparer la vue (gridView) sont toutes différentes et ne devraient pas se trouver dans la même methode

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Juin 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Juin 2007
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    Je vais essayer ce que tu m'as dit pour le grid.



    Concernant la connexion, elle est fermée quoi qu'il arrive

    puisque je la ferme juste avant le return, qui est ma derniere ligne de ma méthode.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    Concernant la connexion, elle est fermée quoi qu'il arrive
    puisque je la ferme juste avant le return, qui est ma derniere ligne de ma
    méthode.
    Non si t'as une exception qui pete tu passera pas par ton return (ni ton close).

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Juin 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Juin 2007
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    Donc l'ideal ce serait ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    oConnexion.Open();
    SqlDataReader reader = recCommand.ExecuteReader();
    oConnexion.Close();

    ??

    si oui, je savais juste pas qu'on pouvait fermer la connexion avant de parcourir le reader. j'croyais que ca faisait un dispose automatique des éléments liés a la connexion.



    concernant la grid, problème résolu !!

    merci beaucoup


    je laisse ouvert en rapport a ma derniere question concernant le close, puis je le mettrai en résolu.

  9. #9
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Non, utilises un try/catch par exemple pour fermer ta connexion dans le finally ou alors la notation using
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Juin 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Juin 2007
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    Ok je vois ce que tu veux dire !


    Merci beaucoup pour ces conseils !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. récupérer la valeur d'un input texte
    Par ThePirateur dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 28/12/2012, 14h19
  2. Débutante, Récupérer valeur d'un input texte
    Par selinav dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/04/2010, 15h58
  3. récupérer la valeur d'un input text après modification
    Par Tellounet dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 28/05/2009, 09h30
  4. Récupérer valeur d'un input type="Text"
    Par Mygush dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/12/2008, 09h45
  5. Réponses: 1
    Dernier message: 25/04/2007, 16h23

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