我正在与第三方表单生成器软件进行一些集成,该软件可将表单发布到我们自己的服务器上。然后将表单数据和文件保存到DB。问题是当表单包含多个文件上载字段时,Request.Files
始终为空。
使用Fiddler,我可以看到二进制文件通过。我唯一想到的是字段名称中包含方括号(因为它是作为数组发送的),因此模型绑定程序无法正确绑定它?通过的字段名称为tfa_20[0]
和tfa_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);
任何帮助将不胜感激。
答案 0 :(得分:1)
使用HttpPostedFileBase以便将文件发布到您的操作中。如果有多个文件,则应使用HttpPostedFileBase []数组。
要启用表单上载,必须将enctype =“ multipart / form-data”添加到表单标签中。或者,如果您使用剃刀语法,请将beginForm标记更改为此。
View.cshtml
@using (Html.BeginForm("action","controller", FormMethod.Post, new { @enctype =
"multipart/form-data" }))
{
}
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();
}