3

让我先尝试尽可能简单地解释我的情况:

假设我有一个包含多个 [input type='File'] 的页面。其中一些可能会被选中,而另一些则不会。

在我的 httppost 方法中,我知道我需要使用像“IEnumerable files”这样的参数来获取文件名,并且每个 [input] 名称我应该定义 = 'files' 或 'files[0]','files[1]' , ETC.....

我的问题是:在获取 HttpPostedFileBase 列表时,如何确定哪个文件属于哪个输入控件?因为某些输入可能会留空。

此外,因为这些 [input] 是动态创建的,并且没有固定数量,所以我无法在 httppost 方法中为它们中的每一个硬编码参数。

4

3 回答 3

2

试试这个解决方案:

看法:

@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="file1" />
    <input type="file" name="file2"/>
    <input type="file" name="file3"/>
    <input type="file" name="file4"/>
    <input type="file" name="file5"/>

    <input type="submit" value="go" />
}

控制器:

  var uploaded = Request.Files.AllKeys
      .Select(x => new {file = Request.Files[x], name = x})
            .Where(x => x.file.ContentLength > 0).ToList();

“上传的”匿名类型将包含属于输入控件名称的文件,并且仅包含选择的输入名称

于 2012-10-31T12:18:17.760 回答
0

您可以使用此代码

    [HttpPost]
    public ActionResult Index(IEnumerable<HttpPostedFileBase> files) {
    foreach (var file in files) {
             if (file.ContentLength > 0) {
               var fileName = Path.GetFileName(file.FileName);
               var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
               file.SaveAs(path);
             }
    }
    return RedirectToAction("Index");
    }

在这里,对于每个文件,您都可以检查文件是否存在。

于 2012-10-31T05:58:14.840 回答
0

如果您有固定数量的文件上传控件,那么您可以定义您的模型,例如

    public class FileUpload
        {
            public HttpPostedFileBase FileUpload1 { get; set; }
            public HttpPostedFileBase FileUpload2 { get; set; }
            public HttpPostedFileBase FileUpload3 { get; set; }
        }

然后从行动中你可以像下面一样访问它们

     public ActionResult Index(Mvc4Application.Models.FileUpload objFileUpload)
    {
          // Do some code like here you can check for each 3 files like
          if(objFileUpload.FileUpload1 != null)
          {
             // Some code
          }
        return View();
    }

更多您可以点击这里

于 2012-11-02T05:11:47.653 回答