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 :
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 <%@ 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>
controle ctrlMultipleUpload :
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); } } }
aspx
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 <%@ 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>
J'éspere que ma question est correctement posée
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(); } } }
Un énorme merci d'avance a tous ceux qui me donneront des pistes...
Partager