3

我正在尝试获取添加到面板的动态生成的 FileUpload 控件的值:

<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);

我这样做是因为我在我的网站中使用了 MasterPage/ContentPage 设置,并且大多数事情都发生在 UpdatePanel 中以用于 AJAX 化。请记住,如果我在 HTML 视图中明确指定 FileUpload 控件,它会 100% 工作。

提交表单后,我尝试像这样迭代面板:

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

    //Do the saving of the file here
}

除了,面板似乎只返回一个控件:页面的内容占位符,没有别的。有没有人对此有一些想法?

4

1 回答 1

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

于 2010-10-15T14:09:17.837 回答