你如何在asp.net C#中正确编写foreach循环来上传多个文件

M H*_*M H 1 c# asp.net file-upload

我在许多网站上看到过这种风格的演示,作为在 asp.net 中上传多个文件的一种方式,但我无法让它工作。如果我选择 6 个文件,它最终只会保存一个文件,但标签显示 6 个同名的文件名。当我调试时,它会像我希望的那样在每个循环中显示每个文件名。为什么它不起作用?

另外,如果重要的话,我在页面上有一个更新面板。

我正在使用打开多个上传的 asp.net 上传控件。我知道路径是正确的,因为当我只上传一个文件时它工作得很好。

string Path = Request.Url.AbsolutePath;
string ProperPath = Path.Replace(@"Pages/InsertVideo.aspx", @"TrainingMaterial/Video/");

if (FileUpload1.HasFiles) { 
    //SaveFile(FileUpload1.PostedFile);

    foreach (HttpPostedFile File in FileUpload1.PostedFiles)
    {
        FileUpload1.SaveAs(System.IO.Path.Combine(Server.MapPath(ProperPath), FileUpload1.FileName));
        lblFilesUploaded1.Text += String.Format("{0}<br />", FileUpload1.FileName);
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过这种技术,结果与上述相同。有什么建议吗?我认为这与我的 SaveAs 字符串有关。

foreach (string key in Request.Files)
{
    HttpPostedFile file = Request.Files[key];
    if (file.ContentLength != 0)
    {
        file.SaveAs(System.IO.Path.Combine(Server.MapPath(ProperPath), FileUpload1.FileName));
    }
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*iss 5

这应该可以解决问题:

if (FileUpload1.HasFiles)
{
    foreach (var file in FileUpload1.PostedFiles)
    {
        file.SaveAs(Path.Combine(Server.MapPath(ProperPath), file.FileName));
        lblFilesUploaded1.Text += String.Format("{0}<br />", file.FileName);
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的解决方案中,您在 foreach 中始终指的是 FileUpload 控件,而不是当前上传的文件。