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 :

user control et file upload ?


Sujet :

ASP.NET

  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut user control et file upload ?
    Bonjour,

    J'ai voulu me faire un controle personnalise pour gerer l'upload d'un fichier sans recharger toute la page.

    Lorsque je mets mon code dans une page normale, seule, pas en tant que controle, l'upload fonctionne.

    Mais des que j'ai mis ce code dans un controle, et que j'appelle le controle sur une page il ne fonctionne plus, le FileUpload.HasFile est toujours faux... savez-vous pourquoi ?

    Voici mon controle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UploadOneFile.ascx.cs" Inherits="TEST.Controls.UploadOneFile" %>
     
    <%--
        Validators and Validation Summaries used in the page
    --%>  
    <asp:ValidationSummary ID="ValidationSummaryAdd" runat="server" ValidationGroup="AddValidation" DisplayMode="BulletList" ShowMessageBox="true" ShowSummary="false" />
     
    <%-- Required Fields --%>
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Browse a file please" ControlToValidate="FileUpload1"  Display="None" ValidationGroup="AddValidation" SetFocusOnError="true"></asp:RequiredFieldValidator>
     
    <asp:FileUpload ID="FileUpload1" runat="server" />
    <asp:Button ID="btnUpload" runat="server" CausesValidation="true"  ValidationGroup="AddValidation" OnClick="btnUpload_Click" Text="Upload File" />
    La verification javascript est bien declenche quand j'entre rien dans le champ.

    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
     
    public partial class UploadOneFile : System.Web.UI.UserControl
        {
     
            protected void Page_Load(object sender, EventArgs e)
            {
            }
     
            protected void btnUpload_Click(object sender, EventArgs e)
            {
     
                if (FileUpload1.HasFile) // Ne passe jamais dedans! TOUJOURS FALSE
                {
                    string contentType = FileUpload1.PostedFile.ContentType;
     
                    // Get the bytes from the uploaded file
                    byte[] fileData = new byte[FileUpload1.PostedFile.InputStream.Length];
                    FileUpload1.PostedFile.InputStream.Read(fileData, 0, fileData.Length);
     
                    // Get the name without folder information from the uploaded file.
                    string originalName = Path.GetFileName(FileUpload1.PostedFile.FileName);
     
                    // Create a new instance of the File class based on the uploaded file.
                    FileManager.File myFile = new FileManager.File(contentType, originalName, fileData);
     
                    // Save the file, and tell the Save method what data store to use.
                    switch (FileManager.AppConfiguration.DataStoreType)
                    {
                        case FileManager.DataStoreType.Database:
                            myFile.Save();
                            break;
                        case FileManager.DataStoreType.FileSystem:
                            myFile.Save(Server.MapPath(Path.Combine(FileManager.AppConfiguration.UploadsFolder, myFile.FileUrl)));
                            break;
                    }
                }
            }
        }

    Merci
    ++

  2. #2
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Bonjour,

    A tout les coup ton UserControl est dans un UpdatePanel ? Si oui, c'est la cause de ton problème.

    Si non, peux tu indiquer comment tu ajoutes ton UserControl à ta page ? Dynamiquement ou simple rajoute de la balise au sein d'une page ASPX ?

    En espérant t'avoir aidé.

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    Mon controle est au sein d'un gridview et qui apparait quand je suis en mode edit.
    Et en effet il y a un updatePanel qui englobe mon GridView.

    C'est donc impossible a faire ?
    Avant je faisais via une iframe mais c'est complique pour passer mais surtout recupere des valeurs... d'ou l'idee de faire un userControl.

    Pas de solution a ce probleme alors ?

    Voici comment j'introduis le controle, directement dans la page ASPX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <TEST:UploadOneFile id="TextBoxUp" runat="server" ></TEST:UploadOneFile>
    Merci
    ++

  4. #4
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Il est connu que les FileUplod posent problème dans certains cas lorsqu'ils sont dans un UpdatePanel.

    Mais ceci fonctionne :

    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
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <div>
    <table width="50%" cellpadding="2" cellspacing="0">
    <tr>
    <td>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="conditional">
    <ContentTemplate>
    <asp:FileUpload ID="FileUpload1" runat="server" />
    <asp:Button ID="Upload" runat="server" Text="Upload" OnClick="Upload_Click" /><br />
    <asp:Image ID="NormalImage" runat="server" /></ContentTemplate>
    <Triggers>
    <asp:PostBackTrigger ControlID="Upload" />
    </Triggers>
    </asp:UpdatePanel>
    </td>
    </tr>
    </table>
    </div>
    </form>
    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
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
     
        protected void Upload_Click(object sender, EventArgs e)
        {
            if (FileUpload1.HasFile)
            {
                FileUpload1.SaveAs(MapPath("~/Image/" + FileUpload1.FileName));
                System.Drawing.Image img1 = System.Drawing.Image.FromFile(MapPath("~/image/") + FileUpload1.FileName);
                NormalImage.ImageUrl = "~/Image/" + FileUpload1.FileName;
            }
        }
    }

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    ah d'accord merci mais donc je ne peux pas passer par un controle personnalise parce que le trigger doit etre sur le bouton qui fait l'upload ?

  6. #6
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    Ah mon probleme est pire en fait:

    Parce que mon composant est au sein de mon GridView donc l'ID dans le PostBackTrigger n'est pas trouve dans le UpdatePanel...

    Impossible du coup ?

    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
     
    <asp:UpdatePanel ID="UpdatePanel" runat="server">
       <ContentTemplate>                    
          <asp:GridView ID="GridViewMain" DataKeyNames="id" runat="server" AutoGenerateColumns="False">
                <Columns>
                        <asp:TemplateField HeaderText="Body" SortExpression="body" ItemStyle-Width="140px" ItemStyle-Wrap="true">
                                <EditItemTemplate>                                     
                                    <TEST:UploadOneFile id="TextBoxBody" runat="server" ></TEST:UploadOneFile>
                                 </EditItemTemplate>
                                 <ItemTemplate>
                                     <asp:Label ID="LabelBody" runat="server" Text='<%# Eval("body") %>' />
                                 </ItemTemplate>
                           </asp:TemplateField>
                </Columns>
           </asp:GridView>
        </ContentTemplate>
     
        <Triggers>
             <asp:PostBackTrigger ControlID="TextBoxBody" />
        </Triggers>
     
    </asp:UpdatePanel>

  7. #7
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Essaye déjà le code que j'ai posté en mettant le UpdateMode à Always et en retirant le Trigger.

    Si le FileUpload fonctionne dans un UpdatePanel non conditionnal, alors le problème vient du fait que ton FileUpload est dans un EditForm d'une GridView, en effet.

    Je n'ai pas Visual Studio sous la main pour tester, mais il doit y avoir une solution. Je vais regarder dès que j'en ai l'occasion.

  8. #8
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    Alors j'a essaye differentes configuration :

    SANS GridView, SANS triggers et UpdateMode a Always : Ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <asp:UpdatePanel ID="UpdatePanel" runat="server" UpdateMode="Always">
           <ContentTemplate>
                  <TEST:UploadOneFile id="TextBoxBody" runat="server" ></EPCOS:UploadOneFile>
           </ContentTemplate>
     </asp:UpdatePanel>
    SANS GridView, AVEC triggers et UpdateMode a Always OU Conditionnal : Fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <asp:UpdatePanel ID="UpdatePanel" runat="server" UpdateMode="Always">
           <ContentTemplate>
                  <TEST:UploadOneFile id="TextBoxBody" runat="server" ></EPCOS:UploadOneFile>
           </ContentTemplate>
           <Triggers>
                 <asp:PostBackTrigger ControlID="TextBoxBody" />
           </Triggers>
     </asp:UpdatePanel>
    Et donc si je rajoute le GridView, ca ne va plus puisque l'ID dans le Triggers est introuvable etant donne qu'il est encapsule dans le mode Edit du GridView.


    Merci

Discussions similaires

  1. [C#] User control
    Par Verboz dans le forum ASP.NET
    Réponses: 4
    Dernier message: 27/04/2005, 22h46
  2. [C#] User Control dynamic
    Par Erakis dans le forum ASP.NET
    Réponses: 10
    Dernier message: 21/10/2004, 18h54
  3. [com applet-servlet][file upload] CharConversionException
    Par meufeu dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 10/08/2004, 12h03
  4. [C#] DateTimePicker web user control
    Par titi29 dans le forum ASP.NET
    Réponses: 8
    Dernier message: 29/06/2004, 18h38
  5. [VB.NET] Provoquer le rechargement d'un user control..
    Par didoboy dans le forum ASP.NET
    Réponses: 7
    Dernier message: 30/04/2004, 14h17

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