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 :

[débutant] Appeler une fonction .Net depuis un control généré dynamiquement


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut [débutant] Appeler une fonction .Net depuis un control généré dynamiquement
    Bonjour,

    Voilà ce que je veux faire, cela devrait éclaircir le titre :
    Je génère sur une page un tableau contenant les fichiers d'un répertoire. Je voudrais proposer un lien pour télécharger chaque fichier en appuyant sur un bouton en face du nom du fichier. Je veux absolument forcer le téléchargement car certains fichiers sont des images hautes résolution ou des pdf qui ne doivent pas être ouverts dans le navigateur. Je sais forcer un téléchargement en utilisant un bouton asp. Mais je ne vois pas comment faire pour qu'un bouton généré dynamiquement appelle ma fonction C# pour forcer le téléchargement.

    J'espère avoir été clair, ne pas hésiter à me demander des précisions si nécessaire.

    Merci d'avance,

    Sovitec

  2. #2
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Il faut pour cela utiliser un repeater. Cela fonctionne un peu comme un GridView à la différence que tu vas pouvoir personaliser le layout à volonté.

    Exemple : je vais afficher pour chaque élément de ma source de données (ici des fichiers de mon répertoire courant), un label pour le nom du fichier et un bouton.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <asp:Repeater ID="Repeater1" runat="server" 
        onitemcommand="Repeater1_ItemCommand">
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "Name")%>'></asp:Label>
        <asp:Button ID="Button1" runat="server" Text="Télécharger" />
    </ItemTemplate>
    <SeparatorTemplate><br /></SeparatorTemplate>
    </asp:Repeater>
    Je vais en plus m'abonner à l'évènement onItemCommand de mon repeater pour être averti dès qu'un contrôle de mon repeater génère un évènement. Avec cette évènement, tu vas pouvoir utiliser le paramètre e dans le but de connaître l'index qui a causé cet évènement et la suite tu la connais.

    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
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack == false)
        {
            var query = from file in System.IO.Directory.GetFiles(Server.MapPath("."))
                        select new System.IO.FileInfo(file);
            Repeater1.DataSource = query.ToList<System.IO.FileInfo>();
            Repeater1.DataBind();
        }
    }
     
    protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
     
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Merci beaucoup, j'avance déjà bien dans la compréhension. Mais je ne sais pas comment je fais pour connaitre le nom du fichier lié au bouton dans la fonction Repeater1_ItemCommand.

  4. #4
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Le plus simple serait de mettre le nom du fichier dans la propriété CommandArgument du bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Button ID="Button1" runat="server" Text="Télécharger" CommandArgument='<%#DataBinder.Eval(Container.DataItem, "Name")%>' />
    Et dans ton code behind, lors de l'ItemCommand, tu pourras récupérer cette valeur directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string filnename = e.CommandArgument != null ? e.CommandArgument.ToString() : string.Empty;

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Merci encore, je pense que là je devrais y arriver. Je mets le tag dès que c'est bon.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Bon, en fait j'ai une erreur de syntaxe ("missing ;") à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var query = from file in System.IO.Directory.GetFiles(Server.MapPath("."))
                        select new System.IO.FileInfo(file);
    et je n'arrive pas à comprendre quel est le problème.

    Merci.

  7. #7
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Tu travailles avec quel framework ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    .Net 2.0

    (Super rapide les réponses !)

  9. #9
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Dans ce cas, le code suivante ne fonctionnera pas, c'est du C# 3.0 disponible avec la version 3.5 du .NET framework :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var query = from file in System.IO.Directory.GetFiles(Server.MapPath("."))
                        select new System.IO.FileInfo(file);
    par contre, tu peux remplacer ce code par une bète boucle qui va construire ta liste de FileInfo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    List<FileInfo> list = new List<FileInfo>();
    foreach(string file in System.IO.Directory.GetFiles(Server.MapPath("."))
    {
       list.Add(new System.IO.FileInfo(file));
    }
    Repeater1.DataSource = list;

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Merci beaucoup, tout marche impec !

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

Discussions similaires

  1. Appeler une fonction .Net en quittant une page
    Par Jsh dans le forum ASP.NET
    Réponses: 11
    Dernier message: 17/09/2007, 10h41
  2. Réponses: 10
    Dernier message: 24/05/2007, 11h14
  3. [WebForms]Comment appeler une fonction ASP depuis une JavaScript ?
    Par flagadda dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 11/08/2006, 14h24
  4. [Info] Appeler une fonction Ada95 depuis Java
    Par mmathieu dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 15/09/2005, 09h42
  5. Comment appeler une fonction JavaScript depuis Delphi ?
    Par Alfred12 dans le forum Web & réseau
    Réponses: 4
    Dernier message: 17/06/2005, 18h15

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