none
Bouton Upload dans le code behind RRS feed

  • Question

  • Je veux gerer un bouton Upload dans le code behind au lieu de faire le bouton static dans la partie HTML et faire sa methode dans le code behind. Je veux ecrire une fonction qui me retourne un bouton upload avec toutes ses fonctionnalités de transfert de fichier d'une source vers une destination avec possibilité de recuperer le chemin complet dans une base de donnée SQL serveur. J'ai essayer en un premier temps de le faire manuellement avec le bouton definis dans la partie HTML et la methode du bouton dans le code behind c'est a dire la partie des methodes ou fonction et ca marche bien. mais cette fois ci je veux pourvoir faire fonctionner le tout dans le code behind. Aviez vous une solution pour moi??
    Sedrick AGBIDINOUKOUN Développeur ASP.Net
    • Modifié sugmados mardi 6 septembre 2011 09:51
    mardi 6 septembre 2011 09:50

Réponses

  • Je comprends mieux. On génère du code HTML pur et dur et donc ces contrôles n'ont aucune existence du point de vue du "code behind".

    Donc il faut revenir à une utilisation de bas niveau avec Request.Form["reponse"] et Request.Files pour lire les valeurs postées sans passer du tout par des contrôles serveurs (qui n'existent pas donc).

    Sinon je proposerais éventuellement qq chose comme :

        <asp:RadioButton ID="rbSelect" runat="server" GroupName="UI" OnCheckedChanged="rbSelect_CheckedChanged" AutoPostBack="true" Checked="true"/>
        <asp:RadioButton ID="rbFile" runat="server" GroupName="UI" OnCheckedChanged="rbFile_CheckedChanged" AutoPostBack="true"/>
        <asp:DropDownList runat="server" ID="SelectUI" />
        <asp:FileUpload runat="server" ID="FileUI"/>
    
    

    et :

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                UpdateUI();
            }
        }
    
        public void rbFile_CheckedChanged(object sender, EventArgs e)
        {
            UpdateUI();
        }
        public void rbSelect_CheckedChanged(object sender, EventArgs e)
        {
            UpdateUI();
        }
    
        void UpdateUI()
        {
            FileUI.Visible = rbFile.Checked;
            SelectUI.Visible = rbSelect.Checked;
        }
    
    


    Donc le contrôle "Select" et "File" sont présents dans le markup ASPX et le code behind se contente de rendre visible uniquement celui dont on a besoin (et ces contrôles sont donc bien accessibles directement depuis le code behind sans avoir à revenir à Request.Form["nom"]).

     

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 6 septembre 2011 16:56
    Modérateur

Toutes les réponses

  • Bonjour,

    Le contrôle dynamique pourrait être créer dans Page_Load et dans tous les cas. Attention aussi. Ce contrôle ne doit pas permettre de modifier la propriété correspondant au nom de fichier pour des raisons de sécurité. Qu'avez vous essayé et quel est le problème que vous rencontrez ?

    Bien pesez aussi l'intérêt de le faire dynamiquement (surtout que l'on a déjà qq qui fonctionne ?)


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 6 septembre 2011 11:19
    Modérateur
  • Oui au faite je suis entrain de faire une application qui permettra a une selection d'un type de reponse donner qu'on affiche L'objet correspondant avec ses fonctionnalite. C'est a dire si on selection un texte libre que ca affiche un champs de saisie de Type TextBox et par exemple si on selectionne un type Numerisation alors que ca affiche a l'ecran un bouton Upload permettant de prendre un fichier sur le disque et de le copier dans un dossier de l'application en de garder dans une variable le chemin exacte du fichier.

    Au faite Qu'en J'ai essayer de le faire directement cest a dire le formulaire dans la partie html et la methode dans la partie methode ca a bien marche mais qu'en de passe le tout dans mon code behind j'ai des message d'eureur puisque la je ne veux pas l'executer dans la page_load mais plutot au beau milieu des codes car il sera executer si lutilisateur finale saisi un type correspondant a son type. Je L'ai mis dans une condition If variable ==numerisation alors executer le code de upload

    voila un peu ceux pour quoi je veux gerer le bouton dans le code behind. Aviez vous une idee?


    sugmados Développeur ASP.Net
    mardi 6 septembre 2011 15:07
  • Je crois comprendre que l'on ne veut pas que ce contrôle soit toujours présent sur l'écran. Il suffirait de jouer sur la propriété Visible pour ne pas l'afficher lorsqu'il est inutile.

    Au pire faire une maquette la plus courte possible qui montre votre problème. Cela sera plus simple qu'une description forcément toujours imprécise. De même en cas d'erreur toujours indiquer le texte exact de cette erreur.

    Si on veut vraiment le faire dans le code behind il reste indispensable de le faire dans le page_load de la page pour respecter le "cycle de vie" de la page (par exemple le contrôle doit exister lorsque la page lit les valeurs envoyées par le navigateur vers le serveur pour changer la valeur des contrôles correspondants).

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 6 septembre 2011 15:23
    Modérateur
  • if (rdr["nom"].ToString() == "choix de reponse")
                                {
                                    tmp += "&nbsp;&nbsp;&nbsp;&nbsp;<select name='reponse" + rdr["id_questions"] + "'>";
                                    tmp += "&nbsp;&nbsp;&nbsp;&nbsp;<option>" + "selectionner" + "</option>";
                                    tmp += "&nbsp;&nbsp;&nbsp;&nbsp;<option>" + rdr["reponses_texte1"] + "</option>";
                                    tmp += "&nbsp;&nbsp;&nbsp;&nbsp;<option>" + rdr["reponses_texte2"] + "</option>";
                                    tmp += "&nbsp;&nbsp;&nbsp;&nbsp;<option>" + rdr["reponses_texte3"] + "</option>";
                                    tmp += "&nbsp;&nbsp;&nbsp;&nbsp;<option>" + rdr["reponses_texte4"] + "</option>";

                                    tmp += "</select>";
                                }
                                else
                                {

                                    if (rdr["nom"].ToString() == "numerisation")
                                    {
                                        tmp += "&nbsp;&nbsp;&nbsp;&nbsp;<input type='file'name='reponse" + rdr["id_questions"] + "'>";

    if (rdr["nom"].ToString() == "numerisation")
                                    {
                                        tmp += "&nbsp;&nbsp;&nbsp;&nbsp;<input type='file'name='reponse" + rdr["id_questions"] + "'>";

    voila un peu le code que j'utilise. je l'explique: mon "rdr" est un tableau dans lequel j'ai recupere ma requette de selection d'une table;de ce fait je veux faire un controle pour verifier le nom selectionner par un utilisateur et si cela correspond a une de mes valeures de controle ma fonction va me retourner l'objet correspondant. Le code en haut concernant "choix de reponse" marche bien et bien d'autre aussi bien dans ma variable tmp pour "numerisation" J'aimerais bien y incorporer la fonction qui me permet de faire la copie du fichier vers un dossier de mon application. C'est la ou j'ai le probleme; je ne sais comment y inserer le code. Deja avec ce qui est la cela m'execute bien le code input type file mais la fonction de copie ny ai pas. Aviez vous une idee SVP?


    sugmados Développeur ASP.Net
    mardi 6 septembre 2011 15:59
  • Je comprends mieux. On génère du code HTML pur et dur et donc ces contrôles n'ont aucune existence du point de vue du "code behind".

    Donc il faut revenir à une utilisation de bas niveau avec Request.Form["reponse"] et Request.Files pour lire les valeurs postées sans passer du tout par des contrôles serveurs (qui n'existent pas donc).

    Sinon je proposerais éventuellement qq chose comme :

        <asp:RadioButton ID="rbSelect" runat="server" GroupName="UI" OnCheckedChanged="rbSelect_CheckedChanged" AutoPostBack="true" Checked="true"/>
        <asp:RadioButton ID="rbFile" runat="server" GroupName="UI" OnCheckedChanged="rbFile_CheckedChanged" AutoPostBack="true"/>
        <asp:DropDownList runat="server" ID="SelectUI" />
        <asp:FileUpload runat="server" ID="FileUI"/>
    
    

    et :

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                UpdateUI();
            }
        }
    
        public void rbFile_CheckedChanged(object sender, EventArgs e)
        {
            UpdateUI();
        }
        public void rbSelect_CheckedChanged(object sender, EventArgs e)
        {
            UpdateUI();
        }
    
        void UpdateUI()
        {
            FileUI.Visible = rbFile.Checked;
            SelectUI.Visible = rbSelect.Checked;
        }
    
    


    Donc le contrôle "Select" et "File" sont présents dans le markup ASPX et le code behind se contente de rendre visible uniquement celui dont on a besoin (et ces contrôles sont donc bien accessibles directement depuis le code behind sans avoir à revenir à Request.Form["nom"]).

     

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 6 septembre 2011 16:56
    Modérateur