在 ASP.Net Core 和 JQuery 中,我试图将选择列表中的选定值关联到正在上传的 IFormFile。选择列表选项是一个类别列表,上传的文件需要属于一个类别。可能有几个 IFormFiles 与表单提交一起提交,但每个文件都必须使用所选类别的 id 进行分类(不是多选,而是几个单个文件)。
我正在使用 JQuery .each() 来获取 IFormFile 值和 categoryId,但是 categoryId 的值在遇到 C# 控制器方法时为空。
--JQuery--
$(':file').each(function (index, field) {
var file = field.files[0];
formData.append('files', file);
var attachmentTypeId = $(this).parent().parent().find('option:selected').val();
formData.append('attachments.Attachment.AttachmentTypeId', attachmentTypeId);
});
--C# ViewModel--
public Attachment Attachment { get; set; }
public List<Attachment> Attachments = new List<Attachment>();
public IFormFile File { get; set; }
public List<IFormFile> Files { get; set; }
--C# Attachment Class--
public int AttachmentTypeId { get; set; }
public string FileName { get; set; }
public byte[] FileContent { get; set; }
public IFormFile FormFile { get; set; }
--C# Controller Method--
public async Task<IActionResult> Create(ViewModel viewModel)
{
if (viewModel.Files.Count > 0 || viewModel.File != null)
{
foreach (var file in viewModel.Files)
{
Attachment attachment = new Attachment()
{
FileName = viewModel.File.FileName,
AttachmentTypeId = viewModel.Attachment.AttachmentTypeId
};
using (var ms = new MemoryStream())
{
viewModel.File.CopyTo(ms);
var fileBytes = ms.ToArray();
string s = Convert.ToBase64String(fileBytes);
attachment.FileContent = fileBytes;
}
path = $"Attachments/Create";
content = new JsonContent(attachment);
await _client.PostData(path, content);
}
}
return Ok();
}
我正在尝试从 Select List selected Option 中获取选定的值到 JQuery FormData 对象中(这可行),并通过 AJAX 调用将其传递给 C# 控制器方法(除了选定的 id 之外,一切正常)。