0

ASP.Net Core と JQuery で、選択リストから選択した値をアップロード中の IFormFile に関連付けようとしています。選択リスト オプションはカテゴリのリストであり、アップロードするファイルはカテゴリに属している必要があります。フォーム送信で複数の IFormFiles が送信される可能性がありますが、各ファイルは選択したカテゴリの ID で分類する必要があります (複数選択ではなく複数の単一ファイル)。

JQuery .each() を使用して IFormFile 値と categoryId を取得していますが、C# コントローラー メソッドにヒットすると、categoryId の値が null になります。

--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 以外はすべて機能します)。

4

0 に答える 0