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 :

Problème de placeholder dans un repeater


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 10
    Par défaut Problème de placeholder dans un repeater
    Bonjour,
    Je m'arrache les cheveux sur un probleme .net, aspx, c# et je ne vois plus d'autre solution que de vous poser la question en esperant que l'un de vous puisse allumer ma lanterne (je n'en doute en fait pas) :

    J'ai un placeholder dans un repeater et voudrais dans ce placeholder faire un upload de fichier multiple. Je voudrais donc que cet upload multiple puisse charger les noms des differents fichiers dans une list pour finalement offrire la possibilité d'uploader tout d'un coup.

    J'ai tenté de sortir le code qui pose problème de son context pour vous illustrer la situation simplement.
    voici le code qui marche (test1) et celui qui ne marche pas (test2) j'aimerai comprendre pourquoi l'un marche et pas l'autre ??

    Dans le cas "test2" qui est le même placeholder mais cette fois placé dans un repeater, à chaque postback je perd le contenu de mes variables membres et donc quand je clique sur le boutton "upload" (ou autre d'ailleur).

    Je suppose que c'est une quetsion de Oninit() mais comment faire??

    fichier aspx de base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="TMP2.ascx.cs" Inherits="pageControls_campaignReporting_WebUserControl" %>
    <%@ Reference Control="~/ctrlMultipleUpload.ascx" %>
     test 1
      <asp:PlaceHolder runat="server" ID="holderMultipleUpload1"></asp:PlaceHolder> 
     
     test 2
     <asp:repeater id="rptFormItems" OnItemDataBound="rptFormItems_ItemDataBound" Runat="server">
        <ItemTemplate>	       
            <asp:PlaceHolder runat="server" ID="holderMultipleUpload"></asp:PlaceHolder> 
        </ItemTemplate>	       
     </asp:repeater>
    fichier c# associé :
    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
     
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
     
    public partial class pageControls_campaignReporting_WebUserControl : System.Web.UI.UserControl
    {
        private controls_formGenerator_ctrlMultipleUpload ctrlMultipleUpload;
        private controls_formGenerator_ctrlMultipleUpload ctrlMultipleUpload1;
     
        private void Page_Load(object sender, System.EventArgs e)
        {
            ctrlMultipleUpload1 = (controls_formGenerator_ctrlMultipleUpload)LoadControl("~/ctrlMultipleUpload.ascx");
            if (ctrlMultipleUpload1 != null)
            {
                ctrlMultipleUpload1.inputStyle = "";
                ctrlMultipleUpload1.inputBaseName = "";
                holderMultipleUpload1.Controls.Add(ctrlMultipleUpload1);
            }
     
            DataTable dt = new DataTable();
            dt.Columns.Add("test");
            dt.Rows.Add("3");
            rptFormItems.DataSource = dt;
            rptFormItems.DataBind();
        }
     
        public void rptFormItems_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
        {
     
            ctrlMultipleUpload = (controls_formGenerator_ctrlMultipleUpload)LoadControl("~/ctrlMultipleUpload.ascx");
            if (ctrlMultipleUpload != null)
            {
                ((PlaceHolder)e.Item.FindControl("holderMultipleUpload")).Controls.Add(ctrlMultipleUpload);
            }
     
        }
    }
    controle ctrlMultipleUpload :
    aspx
    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
     
    <%@ Control Language="C#" AutoEventWireup="false" CodeFile="ctrlMultipleUpload.ascx.cs" Inherits="controls_formGenerator_ctrlMultipleUpload" %>
     
     
        <input id="FindFile" style="WIDTH: 274px; HEIGHT: 22px" 
                  type="file" size="26" runat="server" name="FindFile" />
        <br />
        <asp:listbox id="ListBox1" EnableViewState="true"
                   runat="server" CssClass="txtbox" 
                  Height="100px" Width="274px" Font-Size="XX-Small"></asp:listbox>
        <br />
        <asp:button id="AddFile" runat="server" Height="23px" 
                  Width="72px" Text="Add">
        </asp:button>
        <asp:button id="RemvFile"
                  runat="server" OnClick="RemvFile_Click" 
                  Height="23px" Width="72px" Text="Remove">
        </asp:button>
        <input id="Upload" style="WIDTH: 71px; HEIGHT: 24px" 
                  type="submit" value="Upload" runat="server" 
                  onserverclick="Upload_ServerClick" name="Upload" />
     
        <br />
        <asp:label id="Label1" runat="server" Height="25px" Width="249px"></asp:label>
    c#
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Xml;
     
    public partial class controls_formGenerator_ctrlMultipleUpload : System.Web.UI.UserControl
    {
       /* protected System.Web.UI.WebControls.ListBox ListBox1;
        protected System.Web.UI.WebControls.Button AddFile;
        protected System.Web.UI.WebControls.Button RemvFile;
        protected System.Web.UI.HtmlControls.HtmlInputFile FindFile;
        protected System.Web.UI.HtmlControls.HtmlInputButton Upload;
        protected System.Web.UI.WebControls.Label Label1;
        protected System.Web.UI.HtmlControls.HtmlGenericControl txtOutput;*/
     
        public ArrayList files = new ArrayList();
        static public ArrayList hif = new ArrayList();
        public int filesUploaded = 0;
     
        public String inputStyle = "";
        public String inputBaseName = "";
     
        private void Page_Load(object sender, System.EventArgs e)
        {
            FindFile.Attributes.CssStyle.Value = inputStyle;
            AddFile.Attributes.CssStyle.Value = inputStyle;
            Upload.Attributes.CssStyle.Value = inputStyle;
            RemvFile.Attributes.CssStyle.Value = inputStyle;
        }
     
        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
     
        private void InitializeComponent()
        {    
            this.RemvFile.Click += new System.EventHandler(this.RemvFile_Click);
            this.AddFile.Click += new System.EventHandler(this.AddFile_Click);
            this.Upload.ServerClick += new System.EventHandler(this.Upload_ServerClick);
            this.Load += new System.EventHandler(this.Page_Load);
     
        }
        #endregion
     
        protected void AddFile_Click(object sender, System.EventArgs e)
        {
            if (this.IsPostBack == true)
            {
                hif.Add(FindFile);
                ListBox1.Items.Add(FindFile.PostedFile.FileName);
            }
            else
            {
     
            }
        }
     
        protected void RemvFile_Click(object sender, System.EventArgs e)
        {
            if(ListBox1.Items.Count != 0)
            {
                hif.RemoveAt(ListBox1.SelectedIndex);
                ListBox1.Items.Remove(ListBox1.SelectedItem.Text);
            }    
        }
     
     
        protected void Upload_ServerClick(object sender, System.EventArgs e)
        {
            string baseLocation = "C:\\temp\\";
            string status = "";
     
     
            if((ListBox1.Items.Count == 0) && (filesUploaded == 0))
            {
                Label1.Text = "Error - a file name must be specified.";
                return;
            }
            else
            {
                foreach(System.Web.UI.HtmlControls.HtmlInputFile HIF in hif)
                {
                    try
                    {
                        string fn = System.IO.Path.GetFileName(HIF.PostedFile.FileName);
                        HIF.PostedFile.SaveAs(baseLocation + fn);
                        filesUploaded++;
                        status += fn + "<br>";
                    }
                    catch(Exception err)
                    {
                        Label1.Text = "Error saving file " + baseLocation
                                                           + "<br>" + err.ToString();
                    }
                }
     
                if(filesUploaded == hif.Count)
                {
                    Label1.Text = "These " + filesUploaded + " file(s) were "
                                           + "uploaded:<br>" + status;
                }
                hif.Clear();
                ListBox1.Items.Clear();
            }
        }    
    }
    J'éspere que ma question est correctement posée
    Un énorme merci d'avance a tous ceux qui me donneront des pistes...

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Je crois qu'on peut pas avoir plusieurs fileUpload dans une meme page.
    A vérifier

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 10
    Par défaut
    Ici je rajoute un élément (path du fichier) dans ma liste box à chaque clique du bouton "add" et cela marche bien quand je met simplement un place holder par contre si je mets ce même place holder dans un repeater ma liste est réinitialisé à chaque post back et ma liste ne contient jamais que un seul élément.

    Ma question est donc pourquoi dans le cas d'un placeholder dans un repeater mes variable sont réinitialisés?

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Parce que dans le OnLoad tu initializes ton user control

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 10
    Par défaut
    Merci pour ton aide lutecefalco!

    Mais alors pourquoi cela marche t'il pour le cas 1 qui réinitialise aussi le control?

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Dans le cas 2, tu re bindes ton control, donc tu perds tes données

Discussions similaires

  1. Problème de placeholder dans un repeater
    Par peak dans le forum C#
    Réponses: 0
    Dernier message: 17/10/2007, 01h01
  2. Problème de date dans MONTHS_BETWEEN
    Par ghostlord79 dans le forum Oracle
    Réponses: 10
    Dernier message: 07/04/2004, 11h21
  3. problème de police dans un richedit
    Par chtiot dans le forum Composants VCL
    Réponses: 4
    Dernier message: 28/10/2003, 09h48
  4. Réponses: 19
    Dernier message: 27/08/2003, 15h32
  5. problème de guillemets dans une formule shell
    Par dim_italia dans le forum VBA Access
    Réponses: 7
    Dernier message: 18/08/2003, 12h46

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