ASP.NET从动态添加的FileUpload控件中保存文件

时间:2011-01-15 15:26:11

标签: c# asp.net

我正在构建一个ASP.NET UserControl,网站用户可以一次上传多张图片。我通过让用户输入所需的FileUpload控件的数量,然后将它们从C#动态添加到asp:Panel控件,以老式的方式进行。

虽然这样可行,但当用户单击“保存”按钮时,不会存储FileUpload中的值/文件。我究竟该如何解决这个问题?

我的代码用于指定所需的FileUpload控件数量:

protected void btnSubmitImageAmount_Click(object sender, EventArgs e)
{
    int amountOfControls = Convert.ToInt32(txtImageAmount.Text);

    for (int i = 0; i < amountOfControls; i++)
    {
        FileUpload fUl = new FileUpload();
        Label lblLineBreak = new Label();
        lblLineBreak.Text = "<br />";
        fUl.ID = i.ToString();
        fUl.Visible = true;
        pnlUploadControls.Controls.Add(fUl);
        pnlUploadControls.Controls.Add(lblLineBreak);
    }
}

“保存”按钮的代码:

protected void btnCreateStory_Click(object sender, EventArgs e)
{
    List<Media> images = new List<Media>();

    foreach (Control ctrl in pnlUploadControls.Controls)
    {
        if (ctrl is FileUpload)
        {
           FileUpload fUl = (FileUpload)ctrl;
           Media media = UmbracoSave(fUl, storydDoc.Id);
           if (media != null)
           {
               images.Add(media);
           }
        }
    }
}

任何人都有任何关于如何解决这个问题的提示? :)

提前致谢!

2 个答案:

答案 0 :(得分:1)

您需要在每次回发时重新创建动态控件,否则它们将不再存在。

我建议您阅读this文章并了解有关page life cycle的更多信息。

答案 1 :(得分:0)

使用动态 FileUpload时,请记得手动设置Page.Form.Enctype =“multipart / form-data”;它是允许通过POST发送文件的编码类型 - 有关更多信息,请参阅What does enctype='multipart/form-data' mean?