Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2518 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Problème de placeholder dans un repeater

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de placeholder dans un repeater

n°1625061
peak
Posté le 16-10-2007 à 23:56:28  profilanswer
 

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 ??
 
fichier aspx de base :

Code :
  1. <%@ Control Language="C#" AutoEventWireup="true" CodeFile="TMP2.ascx.cs" Inherits="pageControls_campaignReporting_WebUserControl" %>
  2. <%@ Reference Control="~/ctrlMultipleUpload.ascx" %>
  3. test 1
  4.   <asp:PlaceHolder runat="server" ID="holderMultipleUpload1"></asp:PlaceHolder>
  5.  
  6. test 2
  7. <asp:repeater id="rptFormItems" OnItemDataBound="rptFormItems_ItemDataBound" Runat="server">
  8.     <ItemTemplate>      
  9.         <asp:PlaceHolder runat="server" ID="holderMultipleUpload"></asp:PlaceHolder>
  10.     </ItemTemplate>      
  11. </asp:repeater>


 
fichier c# associé :

Code :
  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Collections;
  5. using System.Web;
  6. using System.Web.Security;
  7. using System.Web.UI;
  8. using System.Web.UI.WebControls;
  9. using System.Web.UI.WebControls.WebParts;
  10. using System.Web.UI.HtmlControls;
  11. public partial class pageControls_campaignReporting_WebUserControl : System.Web.UI.UserControl
  12. {
  13.     private controls_formGenerator_ctrlMultipleUpload ctrlMultipleUpload;
  14.     private controls_formGenerator_ctrlMultipleUpload ctrlMultipleUpload1;
  15.     private void Page_Load(object sender, System.EventArgs e)
  16.     {
  17.         ctrlMultipleUpload1 = (controls_formGenerator_ctrlMultipleUpload)LoadControl("~/ctrlMultipleUpload.ascx" );
  18.         if (ctrlMultipleUpload1 != null)
  19.         {
  20.             ctrlMultipleUpload1.inputStyle = "";
  21.             ctrlMultipleUpload1.inputBaseName = "";
  22.             holderMultipleUpload1.Controls.Add(ctrlMultipleUpload1);
  23.         }
  24.         DataTable dt = new DataTable();
  25.         dt.Columns.Add("test" );
  26.         dt.Rows.Add("3" );
  27.         rptFormItems.DataSource = dt;
  28.         rptFormItems.DataBind();
  29.     }
  30.     public void rptFormItems_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
  31.     {
  32.         ctrlMultipleUpload = (controls_formGenerator_ctrlMultipleUpload)LoadControl("~/ctrlMultipleUpload.ascx" );
  33.         if (ctrlMultipleUpload != null)
  34.         {
  35.             ((PlaceHolder)e.Item.FindControl("holderMultipleUpload" )).Controls.Add(ctrlMultipleUpload);
  36.         }
  37.        
  38.     }
  39. }


 
controle ctrlMultipleUpload :
aspx

Code :
  1. <%@ Control Language="C#" AutoEventWireup="false" CodeFile="ctrlMultipleUpload.ascx.cs" Inherits="controls_formGenerator_ctrlMultipleUpload" %>
  2.    
  3.     <input id="FindFile" style="WIDTH: 274px; HEIGHT: 22px"
  4.               type="file" size="26" runat="server" name="FindFile" />
  5.     <br />
  6.     <asp:listbox id="ListBox1" EnableViewState="true"
  7.                runat="server" CssClass="txtbox"
  8.               Height="100px" Width="274px" Font-Size="XX-Small"></asp:listbox>
  9.     <br />
  10.     <asp:button id="AddFile" runat="server" Height="23px"
  11.               Width="72px" Text="Add">
  12.     </asp:button>
  13.     <asp:button id="RemvFile"
  14.               runat="server" OnClick="RemvFile_Click"
  15.               Height="23px" Width="72px" Text="Remove">
  16.     </asp:button>
  17.     <input id="Upload" style="WIDTH: 71px; HEIGHT: 24px"
  18.               type="submit" value="Upload" runat="server"
  19.               onserverclick="Upload_ServerClick" name="Upload" />
  20.     <br />
  21.     <asp:label id="Label1" runat="server" Height="25px" Width="249px"></asp:label>


 
c#

Code :
  1. using System;
  2. using System.Collections;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Web;
  7. using System.Web.SessionState;
  8. using System.Web.UI;
  9. using System.Web.UI.WebControls;
  10. using System.Web.UI.HtmlControls;
  11. using System.Xml;
  12. public partial class controls_formGenerator_ctrlMultipleUpload : System.Web.UI.UserControl
  13. {
  14.    /* protected System.Web.UI.WebControls.ListBox ListBox1;
  15.     protected System.Web.UI.WebControls.Button AddFile;
  16.     protected System.Web.UI.WebControls.Button RemvFile;
  17.     protected System.Web.UI.HtmlControls.HtmlInputFile FindFile;
  18.     protected System.Web.UI.HtmlControls.HtmlInputButton Upload;
  19.     protected System.Web.UI.WebControls.Label Label1;
  20.     protected System.Web.UI.HtmlControls.HtmlGenericControl txtOutput;*/
  21.     public ArrayList files = new ArrayList();
  22.     static public ArrayList hif = new ArrayList();
  23.     public int filesUploaded = 0;
  24.    
  25.     public String inputStyle = "";
  26.     public String inputBaseName = "";
  27.     private void Page_Load(object sender, System.EventArgs e)
  28.     {
  29.         FindFile.Attributes.CssStyle.Value = inputStyle;
  30.         AddFile.Attributes.CssStyle.Value = inputStyle;
  31.         Upload.Attributes.CssStyle.Value = inputStyle;
  32.         RemvFile.Attributes.CssStyle.Value = inputStyle;
  33.     }
  34.     #region Web Form Designer generated code
  35.     override protected void OnInit(EventArgs e)
  36.     {
  37.         //
  38.         // CODEGEN: This call is required by the ASP.NET Web Form Designer.
  39.         //
  40.         InitializeComponent();
  41.         base.OnInit(e);
  42.     }
  43.  
  44.     private void InitializeComponent()
  45.     {   
  46.         this.RemvFile.Click += new System.EventHandler(this.RemvFile_Click);
  47.         this.AddFile.Click += new System.EventHandler(this.AddFile_Click);
  48.         this.Upload.ServerClick += new System.EventHandler(this.Upload_ServerClick);
  49.         this.Load += new System.EventHandler(this.Page_Load);
  50.     }
  51.     #endregion
  52.     protected void AddFile_Click(object sender, System.EventArgs e)
  53.     {
  54.         if (this.IsPostBack == true)
  55.         {
  56.             hif.Add(FindFile);
  57.             ListBox1.Items.Add(FindFile.PostedFile.FileName);
  58.         }
  59.         else
  60.         {
  61.            
  62.         }
  63.     }
  64.     protected void RemvFile_Click(object sender, System.EventArgs e)
  65.     {
  66.         if(ListBox1.Items.Count != 0)
  67.         {
  68.             hif.RemoveAt(ListBox1.SelectedIndex);
  69.             ListBox1.Items.Remove(ListBox1.SelectedItem.Text);
  70.         }   
  71.     }
  72.     protected void Upload_ServerClick(object sender, System.EventArgs e)
  73.     {
  74.         string baseLocation = "C:\\temp\\";
  75.         string status = "";
  76.        
  77.        
  78.         if((ListBox1.Items.Count == 0) && (filesUploaded == 0))
  79.         {
  80.             Label1.Text = "Error - a file name must be specified.";
  81.             return;
  82.         }
  83.         else
  84.         {
  85.             foreach(System.Web.UI.HtmlControls.HtmlInputFile HIF in hif)
  86.             {
  87.                 try
  88.                 {
  89.                     string fn = System.IO.Path.GetFileName(HIF.PostedFile.FileName);
  90.                     HIF.PostedFile.SaveAs(baseLocation + fn);
  91.                     filesUploaded++;
  92.                     status += fn + "<br>";
  93.                 }
  94.                 catch(Exception err)
  95.                 {
  96.                     Label1.Text = "Error saving file " + baseLocation
  97.                                                        + "<br>" + err.ToString();
  98.                 }
  99.             }
  100.             if(filesUploaded == hif.Count)
  101.             {
  102.                 Label1.Text = "These " + filesUploaded + " file(s) were "
  103.                                        + "uploaded:<br>" + status;
  104.             }
  105.             hif.Clear();
  106.             ListBox1.Items.Clear();
  107.         }
  108.     }   
  109. }


 
J'éspere que ma question est correctement posée :)
Un énorme merci d'avance à tous ceux qui me donneront des pistes...


Message édité par peak le 16-10-2007 à 23:58:02
mood
Publicité
Posté le 16-10-2007 à 23:56:28  profilanswer
 

n°1625171
MagicBuzz
Posté le 17-10-2007 à 09:30:34  profilanswer
 

Salut :)
 
Désolé, tête dans le paté ce matin powa, donc j'ai pas compris ta question, donc pardonne-moi d'avance si je répond à côté de la plaque :D
 
De ce que je lis dans ma boule de crystal embrumée, quand tu mets un contrôle directement dans ton repeater dans le fichier ASPX, tu ne sais pas trop comment y accéder, c'est ça ?
 
Si oui, alors moi j'avais trouvé à en .NET 1.1, pas eu à me poser la question en 2.0, y'a peut-être plus propre :

Code :
  1. private void bouSearchPro_ItemDataBound(object sender, RepeaterItemEventArgs e)
  2.         {
  3.             if (e.Item.ItemType == ListItemType.Footer)
  4.             {
  5.                 ((Literal)e.Item.FindControl("titLegend" )).Text = lan.GetMessage((string)Session["codlan"], "titLegend" );
  6.                 ((Literal)e.Item.FindControl("txtLegend" )).Text = lan.GetMessage((string)Session["codlan"], "txtLegend" );
  7.             }
  8.             else if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  9.             {
  10.                 if ((string)((DataRowView)e.Item.DataItem)["sigfou"] != this.currentSigfou)
  11.                 {
  12.                     this.currentSigfou = (string)((DataRowView)e.Item.DataItem)["sigfou"];
  13.                     Label lblSigfou = new Label();
  14.                     lblSigfou.Text = this.currentSigfou;
  15.                     lblSigfou.Attributes.Add("style", "clear: both; font-weight: bold; display: block;" );
  16.                     e.Item.Controls.AddAt(0, lblSigfou);
  17.                 }
  18.                 if ((string)((DataRowView)e.Item.DataItem)["codblocage"] == "DEP" )
  19.                 {
  20.                     ((Label)e.Item.FindControl("titRefpro" )).ForeColor = System.Drawing.Color.Blue;
  21.                     ((Label)e.Item.FindControl("titSize" )).ForeColor = System.Drawing.Color.Blue;
  22.                     ((Label)e.Item.FindControl("titPrxtar" )).ForeColor = System.Drawing.Color.Blue;
  23.                     ((Label)e.Item.FindControl("titQotite" )).ForeColor = System.Drawing.Color.Blue;
  24.                     ((Label)e.Item.FindControl("refpro" )).ForeColor = System.Drawing.Color.Blue;
  25.                     ((Label)e.Item.FindControl("valSize" )).ForeColor = System.Drawing.Color.Blue;
  26.                     ((Label)e.Item.FindControl("titStatut" )).ForeColor = System.Drawing.Color.Blue;
  27.                     ((Label)e.Item.FindControl("valStatut" )).ForeColor = System.Drawing.Color.Blue;
  28.                     ((Label)e.Item.FindControl("nompro" )).ForeColor = System.Drawing.Color.Blue;
  29.                     ((Label)e.Item.FindControl("prxtar" )).ForeColor = System.Drawing.Color.Blue;
  30.                     ((Label)e.Item.FindControl("qotite" )).ForeColor = System.Drawing.Color.Blue;
  31.                 }
  32.                 else if ((string)((DataRowView)e.Item.DataItem)["codblocage"] == "PMT" || (string)((DataRowView)e.Item.DataItem)["codblocage"] == "SOL" )
  33.                 {
  34.                     ((Label)e.Item.FindControl("titRefpro" )).ForeColor = System.Drawing.Color.Green;
  35.                     ((Label)e.Item.FindControl("titSize" )).ForeColor = System.Drawing.Color.Green;
  36.                     ((Label)e.Item.FindControl("titPrxtar" )).ForeColor = System.Drawing.Color.Green;
  37.                     ((Label)e.Item.FindControl("titQotite" )).ForeColor = System.Drawing.Color.Green;
  38.                     ((Label)e.Item.FindControl("refpro" )).ForeColor = System.Drawing.Color.Green;
  39.                     ((Label)e.Item.FindControl("valSize" )).ForeColor = System.Drawing.Color.Green;
  40.                     ((Label)e.Item.FindControl("titStatut" )).ForeColor = System.Drawing.Color.Green;
  41.                     ((Label)e.Item.FindControl("valStatut" )).ForeColor = System.Drawing.Color.Green;
  42.                     ((Label)e.Item.FindControl("nompro" )).ForeColor = System.Drawing.Color.Green;
  43.                     ((Label)e.Item.FindControl("prxtar" )).ForeColor = System.Drawing.Color.Green;
  44.                     ((Label)e.Item.FindControl("qotite" )).ForeColor = System.Drawing.Color.Green;
  45.                 }
  46.                 ((Label)e.Item.FindControl("titRefpro" )).Text = lan.GetMessage((string)Session["codlan"], "titRefpro" );
  47.                 ((Label)e.Item.FindControl("titSize" )).Text = lan.GetMessage((string)Session["codlan"], "titSize" );
  48.                 //if (habilitation.getHabilitation((string)Session["habilitation"], habilitation.Habilitations.vtar))
  49.                 //{
  50.                     ((Label)e.Item.FindControl("titPrxtar" )).Text = lan.GetMessage((string)Session["codlan"], "titPrxtar" );
  51.                 //}
  52.                 ((Label)e.Item.FindControl("titQotite" )).Text = lan.GetMessage((string)Session["codlan"], "titQotite" );
  53.                 ((Label)e.Item.FindControl("refpro" )).Text = (string)((DataRowView)e.Item.DataItem)["refpro"];
  54.                 if (habilitation.getHabilitation((string)Session["habilitation"], habilitation.Habilitations.readNews) && (decimal)((DataRowView)e.Item.DataItem)["numnew"] != 0)
  55.                 {
  56.                     HtmlAnchor newLinkBtn = new HtmlAnchor();
  57.                     newLinkBtn.InnerText = "*";
  58.                     newLinkBtn.HRef = "News.aspx?numnew=" + ((decimal)((DataRowView)e.Item.DataItem)["numnew"]).ToString();
  59.                     ((Label) e.Item.FindControl("refpro" )).Controls.Add(newLinkBtn);
  60.                 }
  61.                 ((Label)e.Item.FindControl("valSize" )).Text = string.Format(lan.GetMessage((string)Session["codlan"], "valSize" ), ((decimal)((DataRowView)e.Item.DataItem)["longue"]).ToString(), ((decimal)((DataRowView)e.Item.DataItem)["large"]).ToString(), ((decimal)((DataRowView)e.Item.DataItem)["haute"]).ToString());
  62.                 ((Label)e.Item.FindControl("titStatut" )).Text = lan.GetMessage((string)Session["codlan"], "titStatut" );
  63.                 ((Label)e.Item.FindControl("valStatut" )).Text = (string)((DataRowView)e.Item.DataItem)["codblocage"];
  64.                 if ((decimal)((DataRowView)e.Item.DataItem)["longue"] == 0 && (decimal)((DataRowView)e.Item.DataItem)["large"] == 0 && (decimal)((DataRowView)e.Item.DataItem)["haute"] == 0)
  65.                 {
  66.                     ((Label)e.Item.FindControl("titSize" )).Visible = false;
  67.                     ((Label)e.Item.FindControl("valSize" )).Visible = false;
  68.                 }
  69.                 ((Label)e.Item.FindControl("nompro" )).Text = (((string)((DataRowView)e.Item.DataItem)["design1"]).Trim().Length == 0)?(string)((DataRowView)e.Item.DataItem)["nompro"]:(string)((DataRowView)e.Item.DataItem)["design1"] + (string)((DataRowView)e.Item.DataItem)["design2"] + (string)((DataRowView)e.Item.DataItem)["design3"];
  70.                 //if (habilitation.getHabilitation((string)Session["habilitation"], habilitation.Habilitations.vtar))
  71.                 //{
  72.                     ((Label)e.Item.FindControl("prxtar" )).Text = (string)((DataRowView)e.Item.DataItem)["prxtar"] + " " + ToolBox.CoddevToSymbol((string)((DataRowView)e.Item.DataItem)["coddev"]);
  73.                     ((Literal)e.Item.FindControl("txtQtecde" )).Text = "<input type=\"text\" name=\"qte" + ((string)((DataRowView)e.Item.DataItem)["codpro"]) + "\" value=\"1\" maxlength=\"4\" size=\"1\">";
  74.                     ((Literal)e.Item.FindControl("txtQtecde" )).Text += "<input type=\"hidden\" name=\"qot" + ((string)((DataRowView)e.Item.DataItem)["codpro"]) + "\" value=\"" + ((decimal)((DataRowView)e.Item.DataItem)["qotite"]).ToString() + "\">";
  75.                     ((LinkButton)e.Item.FindControl("btnChgPro" )).Text = lan.GetMessage((string)Session["codlan"], "addBasket" );
  76.                     ((LinkButton)e.Item.FindControl("btnChgPro" )).CommandArgument = (string)((DataRowView)e.Item.DataItem)["codpro"];
  77.                 //}
  78.                 //else
  79.                 //{
  80.                 //    ((LinkButton)e.Item.FindControl("btnChgPro" )).Visible = false;
  81.                 //}
  82.                 ((Label)e.Item.FindControl("qotite" )).Text = ((decimal)((DataRowView)e.Item.DataItem)["qotite"]).ToString();
  83.                 ((Image)e.Item.FindControl("thb" )).Attributes.Add("alt", (string)((DataRowView)e.Item.DataItem)["nompro"]);
  84.                 if (((string)((DataRowView)e.Item.DataItem)["chemin_acces"]).Trim() != string.Empty)
  85.                 {
  86.                     ((Image)e.Item.FindControl("thb" )).Attributes.Add("onclick", "javascript:window.open(\"Picture.aspx?chemin_acces=" + ((string)((DataRowView)e.Item.DataItem)["chemin_acces"]).Trim().Replace("\\", "\\\\" ) + "\", \"Picture\" )" );
  87.                 }
  88.                 ((Image)e.Item.FindControl("thb" )).ImageUrl = "showThb.aspx?chemin_acces=" + ((string)((DataRowView)e.Item.DataItem)["chemin_acces"]).Trim();
  89.             }
  90.         }


 
(pour résumer, je porcine à grands coups de Findcontrol)

n°1625209
peak
Posté le 17-10-2007 à 10:21:45  profilanswer
 

Merci pour ta répopnse MagicBuzz mais ma question simplifiée est la suivante :  
 
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 donc jamais que un seul élément maximum.
 
Donc pourquoi dans le cas d'un placeholder dans un repeater mes variable sont réinitialisés? (ici ma listBox)

n°1625261
MagicBuzz
Posté le 17-10-2007 à 10:56:18  profilanswer
 

ah. ben là j'en sais vraiment rien :D
 
le postback a toujours été un grand mystère pour moi, qui me gonfle au plus haut point :D

n°1625601
peak
Posté le 17-10-2007 à 15:34:55  profilanswer
 

Merci quand même. Moi aussi j'ai un peu de mal avec les post back mais ça commence à rentrer tout doucement.
Je post une solution dès que j'en trouve une ....

n°1625950
moi23372
Posté le 17-10-2007 à 21:04:17  profilanswer
 

tu ne saurais mettre plusieurs composant d'upload pour uploader en même temps pour uen raison technique évidente.  
La limititation ne vient pas de .NET, mais directement de html. En effet, dans une trame html, il n'y a qu'une zone qui permet d'insérer un fichier, une et une seule.  
 
Ensuite, ce n'est vraiment pas bien de boucler sur les contentPlaceHolder, car tu risques d'avoir des ID identiques alors que cela est interdit. Pour preuve, tu as des comportements bizzare puisqu'au niveau du ViewState ,il n'en retient qu'un.  
 
Donc, ton problème n'est pas technique, mais vient d'une compréhension de base du protocole.

n°1627283
peak
Posté le 19-10-2007 à 14:29:07  profilanswer
 

Je ne veux pas uploader plusieurs fichiers en même temps, je veux juste comprend pourquoi le contenu d'une liste n'est plus disponible dans le cas 2, alors qu'il l'est dans le cas 1. Pour les id, .net renomme les id se trouvant dans des contrôles ou dans des repeaters avec l'instance de répétition; cela ne posera donc pas de problèmes! (...$...1234$..$id)
 

n°1627663
moi23372
Posté le 19-10-2007 à 19:57:42  profilanswer
 

oui mais les contentplaceholder sont pas conçu pour faire ce que tu veux faire désolé


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Problème de placeholder dans un repeater

 

Sujets relatifs
texbox listox access ado probleme d'affichageProblème objet en argument vba
Probleme de date chez client mais pas chez moi[Résolu] Problème avec la fonction Ubound
problème de comptage ...probleme lors de compilation module manquant
aidez moi SVP...j'ai un problèmeProbleme de requête SQL
Probleme avec GetFileSecurityProbleme de charset
Plus de sujets relatifs à : Problème de placeholder dans un repeater


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR