ienumerable,在mvc中循环

ienumerable , looping in mvc

我正在用 MVC 中的多个文件上传器创建一个页面。

我想要实现的是,当我提交值时,上传的图像应命名为 guid 和递增的 i 值,例如 guid0guid1guid2。我尝试了循环,但它只保存了一张图像,直到循环结束。 i++ 虽然没有用。

我的控制器是这样的:

public ActionResult Home(SomeClass someclass, IEnumerable<HttpPostedFileBase> files)
    {
        var guid = Guid.NewGuid().ToString();
        someclass.filename = guid;
        int i = 0;
        foreach (var file in files)
        {
            if (file.ContentLength > 0)
             {
                var fileName = guid + "" + i + ".jpg";
                var path = Path.Combine(Server.MapPath("~/Content/admin/Upload"), fileName);
                file.SaveAs(path);
                i++;                         
             }
         }
         db.someclasses.Add(someclass);
         db.SaveChanges();                
         return RedirectToAction("Preview");
      }

我的观点是这样的

<input type="file" name="files" id=1>
<input type="file" name="files" id=2>

Update :我在 if 循环中收到 11 个文件,但是一旦它们通过循环,在名为 fdea36c3-545a-4e08- 的图像文件夹中只有一个图像8af4-7fa6bd88bc6b0 。我想要实现的是所有 11 个名为 fdea36c3-545a-4e08-8af4-7fa6bd88bc6b0、fdea36c3-545a-4e08-8af4-7fa6bd88bc6b1、fdea36c3-545a-4e08-8af4-7fa6bd88bc6b2.....等等的图像。

嗯,我对 HTML 输入不太熟悉,但我认为您应该在 SINGLE 文件输入标签中使用 "multiple" 属性。 或者将 "files" 重命名为 "files[]"。 看看this

如果视图中有多个文件控件,请尝试这种方式。 您甚至可以为每个文件初始化 Guid,并且可以忽略将 i 附加到名称。

public class MultipleFilesForm
{
    public HttpPostedFileBase file1 {get;set;}

    public HttpPostedFileBase file2 {get;set;}
}

动作方法为

public ActionResult Home(MultipleFilesForm form)
{
        var guid = Guid.NewGuid().ToString();
        someclass.filename = guid;
        int i = 0;

    if(form.file1 != null)
    {
             var file = form.file1;
             if (file.ContentLength > 0)
             {
                var fileName = guid + i.ToString() + Path.GetExtension(file.FileName));
                var path = Path.Combine(Server.MapPath("~/Content/admin/Upload"), fileName);
                file.SaveAs(path);
                i++;                         
             }
    }
    if(form.file2 != null)
    {
        //handle file
    }

    ...
}

[更新] 试试这个

也试试这个。

for (int i = 0; i < Request.Files.Count; i++)
        {
            var file = Request.Files[i];

            if (file != null && file.ContentLength > 0)
            {
     var fileName = guid + i.ToString() + Path.GetExtension(file.FileName)); 

var path = Path.Combine(Server.MapPath("~/Content/admin/Upload"), fileName);

 file.SaveAs(path); 

i++; 
            }
         }