C# 当文件作为数组传递时,Request.Files为空

C# 当文件作为数组传递时,Request.Files为空,c#,asp.net-mvc,C#,Asp.net Mvc,我正在与第三方表单生成器软件进行一些集成,该软件允许表单发布到我们自己的服务器上。表单数据和文件随后保存到数据库中。问题是,当表单包含多个文件上载字段时,Request.Files始终为空 使用Fiddler,我可以看到二进制文件通过。我能想到的唯一一件事是字段名中包含括号(因为它是作为数组发送的),因此模型绑定器无法正确绑定它?通过的字段名是tfa\u 20[0]和tfa\u 20[1] 代码方面,这是相当标准的东西: var data = new Submission() { Con

我正在与第三方表单生成器软件进行一些集成,该软件允许表单发布到我们自己的服务器上。表单数据和文件随后保存到数据库中。问题是,当表单包含多个文件上载字段时,
Request.Files
始终为空

使用Fiddler,我可以看到二进制文件通过。我能想到的唯一一件事是字段名中包含括号(因为它是作为数组发送的),因此模型绑定器无法正确绑定它?通过的字段名是
tfa\u 20[0]
tfa\u 20[1]

代码方面,这是相当标准的东西:

var data = new Submission()
{
    ConfigurationDetailId = configDetail.Id,
    SubmitterEmail = submitterEmail,
    SubmissionData = Request.Form.AllKeys.Select(k => new SubmissionData()
    {
        FieldName = k,
        FieldValue = Request.Form[k]
    }).ToList(),
    SubmissionFiles = new List<SubmissionFile>()
};

// process any files uploaded
if (Request.Files.Count > 0)
{
    foreach (string field in Request.Files)
    {
        var uploadedFile = Request.Files[field];

        if (!string.IsNullOrEmpty(fileName))
        {
                data.SubmissionFiles.Add(GetSubmissionFile(uploadedFile, fileName));
        }
    }
}

Repository.SaveForm(data);
var数据=新提交()
{
ConfigurationDetailId=configDetail.Id,
SubmitterEmail=SubmitterEmail,
SubmissionData=Request.Form.AllKeys.Select(k=>newsubmissiondata()
{
FieldName=k,
FieldValue=请求。表单[k]
}).ToList(),
SubmissionFiles=新列表()
};
//处理所有上传的文件
如果(Request.Files.Count>0)
{
foreach(Request.Files中的字符串字段)
{
var uploadedFile=Request.Files[field];
如果(!string.IsNullOrEmpty(文件名))
{
data.SubmissionFiles.Add(GetSubmissionFile(uploadedFile,fileName));
}
}
}
存储库.存储表单(数据);

任何帮助都将不胜感激。

使用HttpPostedFileBase将文件发布到您的操作中。如果有多个文件,则应使用HttpPostedFileBase[]数组

要在表单中启用上载,需要将enctype=“multipart/form data”添加到表单标记中。或者,如果您使用razor语法,请将beginForm标记更改为此

View.cshtml

   @using (Html.BeginForm("action","controller", FormMethod.Post, new { @enctype = 
  "multipart/form-data" }))
    {
    }

public ActionResult YourAction(HttpPostedFileBase[]文件)
{
var data=新提交()
{
ConfigurationDetailId=configDetail.Id,
SubmitterEmail=SubmitterEmail,
SubmissionData=Request.Form.AllKeys.Select(k=>newsubmissiondata()
{
FieldName=k,
FieldValue=请求。表单[k]
}).ToList(),
SubmissionFiles=新列表()
};
如果(files.Length>0)
{
foreach(文件中的HttpPostedFileBase文件)
{
var uploadedFile=文件;
如果(!string.IsNullOrEmpty(file.FileName))
{
data.SubmissionFiles.Add(GetSubmissionFile(uploadedFile,file.fileName));
}
}
}
返回视图();
}

你好。不幸的是,这不起作用<代码>文件为空。@SamD。请您共享视图文件。请确保您的表单支持上载。我添加了额外的代码来支持上传。
 public ActionResult YourAction(HttpPostedFileBase[] files)
    {
        var data = new Submission()
        {
            ConfigurationDetailId = configDetail.Id,
            SubmitterEmail = submitterEmail,
            SubmissionData = Request.Form.AllKeys.Select(k => new SubmissionData()
            {
                FieldName = k,
                FieldValue = Request.Form[k]
            }).ToList(),
            SubmissionFiles = new List<SubmissionFile>()
        };

        if (files.Length > 0)
        {
            foreach (HttpPostedFileBase file in files)
            {
                var uploadedFile = file;

                if (!string.IsNullOrEmpty(file.FileName))
                {
                    data.SubmissionFiles.Add(GetSubmissionFile(uploadedFile, file.fileName));
                }
            }
        }

        return View();
    }