我正在尝试将一些带有额外字段的文件发送到服务器。
这是我的模特
// PreOrderInput contains some fields that getting populated correctly
public class PreOrderInputModel : PreOrderInput
{
public new List<FileInputModel> Files { get; set; }
}
public class FileInputModel
{
public HttpPostedFileBase FileContent { get; set; }
public string FileName { get; set; }
public DocumentTypeCodes DocumentTypeCode { get; set; }
}
这是vue.js应用程序中准备表单数据的部分
getFormData()
{
var data = new FormData()
data.append("LegalData[ProfileTypeCode]", this.model.type)
data.append("LegalData[Inn]", this.model.inn)
data.append("LegalData[OrganisationName]", this.model.organization)
data.append("LegalData[Email]", this.model.email)
data.append("Files[0][FileName]", this.model.files.passport.name)
data.append("Files[0][FileContent]", this.model.files.passport.file)
data.append("Files[0][DocumentTypeCode]", this.documentTypeCode.SNILS)
return data
},
该应用发布以下数据(示例)
mimeType: multipart/form-data; boundary=----WebKitFormBoundaryUTk0Jj2CJJCLZOYm
------WebKitFormBoundaryUTk0Jj2CJJCLZOYm
Content-Disposition: form-data; name="LegalData[ProfileTypeCode]"
null
------WebKitFormBoundaryUTk0Jj2CJJCLZOYm
Content-Disposition: form-data; name="LegalData[Inn]"
null
------WebKitFormBoundaryUTk0Jj2CJJCLZOYm
Content-Disposition: form-data; name="LegalData[OrganisationName]"
null
------WebKitFormBoundaryUTk0Jj2CJJCLZOYm
Content-Disposition: form-data; name="LegalData[Email]"
null
------WebKitFormBoundaryUTk0Jj2CJJCLZOYm
Content-Disposition: form-data; name="Files[0][FileName]"
AdmittedSkzi.xlsx
------WebKitFormBoundaryUTk0Jj2CJJCLZOYm
Content-Disposition: form-data; name="Files[0][FileContent]"; filename="AdmittedSkzi.xlsx"
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
------WebKitFormBoundaryUTk0Jj2CJJCLZOYm
Content-Disposition: form-data; name="Files[0][DocumentTypeCode]"
11
------WebKitFormBoundaryUTk0Jj2CJJCLZOYm--
这是控制者
[HttpPost]
public ActionResult CreatePreOrder(PreOrderInputModel preOrderInput)
{
preOrderInput.CreatorLogin = UserLogin;
return Json(_customerPreOrderService.CreatePreOrder(UserLogin, preOrderInput));
}
尽管Request.Files包含发布的文件数据,但preOrderInput.Files [0] .FileContent为null。
我错过了重要的东西吗?
答案 0 :(得分:1)
您要将与模型无关的属性名称附加到FormData
。
您已经注意到自己,您使用preOrderInput.Files[0].FileContent
来访问控制器方法中的值-即点符号来访问复杂对象的属性,因此FormData
中的属性名称必须与之匹配符号。
由于preOrderInput
是方法中参数的名称,因此只需将其从属性名称中删除即可,因此应该是
var data = new FormData()
....
data.append("Files[0].FileContent", this.model.files.passport.file); // not "Files[0][FileContent]"
并为您添加将添加到FormData