2010-10-15 58 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