Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC:如何知道HttpPostedFileBase中的哪个输入值_Asp.net Mvc_Asp.net Mvc 3_Razor - Fatal编程技术网

Asp.net mvc MVC:如何知道HttpPostedFileBase中的哪个输入值

Asp.net mvc MVC:如何知道HttpPostedFileBase中的哪个输入值,asp.net-mvc,asp.net-mvc-3,razor,Asp.net Mvc,Asp.net Mvc 3,Razor,让我先尽可能简单地解释一下我的情况: 假设我有一个包含多个[input type='File']的页面。其中一些可以选择为文件,而另一些则不是 在我的httppost方法中,我知道我需要使用像“IEnumerable files”这样的参数来获取文件名,以及我应该定义的每个[input]名称='files'或'files[0]'、'files[1]'等 我的问题是:在获取HttpPostedFileBase列表时,如何确定哪个文件属于哪个输入控件?因为有些输入可能会留空 此外,由于这些[inpu

让我先尽可能简单地解释一下我的情况:

假设我有一个包含多个[input type='File']的页面。其中一些可以选择为文件,而另一些则不是

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

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

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

您可以使用此代码

    [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");
    }
[HttpPost]
公共操作结果索引(IEnumerable文件){
foreach(文件中的var文件){
如果(file.ContentLength>0){
var fileName=Path.GetFileName(file.fileName);
var path=path.Combine(Server.MapPath(“~/App\u Data/uploads”),文件名);
file.SaveAs(路径);
}
}
返回操作(“索引”);
}
在这里,您可以检查每个文件是否存在。

尝试以下解决方案:

视图:


“上载”匿名类型将包含属于输入控件名称的文件,并且将仅包含选定的输入名称如果您有固定数量的文件上载控件,则可以定义您的模型,如

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

有关更多信息,您可以单击

,如果它们是动态的,为什么您想知道哪一个属于什么?如果用户没有选择文件,您还可以看到集合中的项目数与文件上载控件的数量相等,因此您可以使用索引方法。标记,我的表单有一个对象列表作为模型。这只是一个属性。因此,某些对象的此属性可能为空(用户未选择任何文件)。从testCoder的“Request.Files.AllKeys[]”解决方案中,我可以将这些输入的名称设置为ie“file\u ObjectId”。然后我可以比较一下,知道哪个对象没有被选中。嗨,testCoder,你的解决方案看起来很棒!所以实际上“输入名称”可以定义为任何字符串。对吗?例如,唱片的唯一序列等。嗨,鲁希尔,我以前试过这个解决方案。实际上,如果我有3个输入,但只有第1个和第3个输入有值,我得到的文件[]会给我2个项目,但我现在无法确定哪些项目属于哪个项目。相反,我需要创建另一个以“IEnumerable files”为属性的模型,然后将Index()操作的参数更改为该模型,然后我可以告诉第二个输入没有inputHi Samuel,上面提到的代码是用于动态文件上载控件,并且所有控件的名称都相同的情况。假设您当时有一个带有“添加更多”链接的文件上载控件,如果您添加了3个控件,那么文件[]将为您提供3个项目,但如果您只选择了两个文件,那么它也将为您提供3个项目,其中两个有文件,一个有空值。但是,如果您有3个固定的文件上载控件,那么您可以通过提供不同的名称轻松访问它们,然后您可以在访问所有其他属性类型为HttpPostedFileBase的控件时访问它们。
    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();
    }