2010-10-15 34 views
3

我試圖讓動態生成的文件上傳的值控制,我添加到面板:一個循環中迭代動態FileUpload控件集合面板控制使用ASP.NET C#

<asp:Panel ID="pFileControls" runat="server"> 
</asp:Panel> 

我創建控件通過一個記錄集:

foreach(DataRow dr in ds.Tables[0].Rows) 
{ 
    FileUpload fu = new FileUpload(); 
    fu.ID = dr["SomeID"].ToString(); 

    pFileControls.Controls.Add(fu); 
} 

一切正常起來的地方,我提交表單與此按鈕點:

<asp:Button ID="btnImportFile" runat="server" Text="Save" OnClick="btnImportFile_Click" /> 

其中我這樣註冊(的Page_Load):

ScriptManager.GetCurrent(this).RegisterPostBackControl(btnImportFile); 

我這樣做是因爲我用我的網站母版/ ContentPage設置,大多是一切發生的UpdatePanel內的AJAXification目的。請記住,如果我在HTML視圖中指定FileUpload控件,它將100%工作。

當表單提交我嘗試迭代面板是這樣的:

foreach (Control ctrl in pFileControls.Controls) 
{ 
    if (ctrl.GetType() != typeof(FileUpload)) 
    { 
     continue; 
    } 

    //Do the saving of the file here 
} 

除此之外,小組似乎只返回一個控制:內容預留位置的頁面,沒有別的。有沒有人有關於此的一些想法?

回答

1

生命週期的哪個部分是您添加動態控件?

如果您將它們放入page_load中,可能爲時已晚,請嘗試將生成的動態控件放入page_init中,看看是否可以解決問題。

頁面生命週期 http://msdn.microsoft.com/en-us/library/ms178472.aspx

動態控件 http://geekswithblogs.net/shahed/archive/2008/06/26/123391.aspx 注:

「它建議Page_Init過程中加載動態 控制代替, 因爲我們可能要掛鉤起來我們 事件在早期的 階段有適當的處理程序...不要分配 動態控制的屬性 (視圖狀態啓用),在Page_Init期間, 它不會被反映。 「

我希望,即使更新面板,您將需要銘記的動態控制在Page_Load限制。

出租或我知道,如果這個幫助,如果我錯過了標記!

讓我們嘗試不同的作用過程中(我已經得到了動態文件上傳的工作,但它是一個熊市,我希望我只是用這個) http://www.asp.net/ajaxlibrary/act_AsyncFileUpload.ashx

http://en.fileuploadajax.subgurim.net/

這些可能不會創建元素的「循環」,但您可以根據需要繼續加載文檔。

我已經特別使用了 http://www.asp.net/ajaxlibrary/act_AsyncFileUpload.ashx 很好的效果。

此更新似乎還存在一些限制:面板和文件上傳,請查看這些網站。

(這一說,不部分更新狀態工作,但不完全回發的工作) http://forums.asp.net/p/1105208/1689084.aspx

你知道,如果提交觸發了整個頁面或只是更新:面板? (看看這個:http://geekswithblogs.net/mmintoff/archive/2009/04/01/fileupload-within-updatepanel.aspx

+0

非常感謝,你給我的第二個鏈接清除了它,我只需要在Page_Load中加載控件! – 2010-10-15 14:21:46

+0

好吧,也許我有點太倉促了。在Page_Load中每次都重新創建控件,它們提交時包含的任何值都會丟失。任何創意? – 2010-10-15 14:30:42

+0

@mr。Smith,您需要在每個頁面加載時創建控件,將這部分放入page_init中,它們將被重新創建在每個負載上,但是當視圖狀態被加載時,你的值將被重新輸入(通過視圖狀態)by page_load視圖狀態已經被加載 – Harrison 2010-10-15 14:36:01