Отправить массив файлов из Jquery ajax в действие контроллера

#c# #jquery #ajax #asp.net-mvc #httppostedfilebase

#c# #jquery #ajax #asp.net-mvc #httppostedfilebase база файлов httpposted #httppostedfilebase

Вопрос:

Я могу передать один файл как System.Web.HttpPostedFileBase, но когда я передаю то же, что и массив файлов, я получаю null в действии контроллера.

Я пробовал отправлять массив файлов.

HTML:

         <input type="file" id="Attachment1">
        <input type="file" id="Attachment2">
        <input type="file" id="Attachment3">
        <input type="file" id="Attachment4">
        <input type="file" id="Attachment5">
  

Javascript:

  var FileData = []; 
 $('input').each(function () {
                var type = $(this).attr("type");
                if (type == "file") {
                    FileData.push($(this).get(0).files[0]);
                }
            });    
var Data = new FormData();
Data.append("Attachments", FileData);         
if (url != '') {
    $.ajax({
        url: url,
        data: Data,
        type: "POST",
        contentType: false,
        processData: false,
        success: function (data) {
            alert("Saved successfully");
        }
    });
}
  

Контроллер:

 public ActionResult InsertDetails(System.Web.HttpPostedFileBase[] Attachments)
{
   return Json(new { Success = false });
}
  

Необходимо получить массив файлов. Заранее спасибо.

Комментарии:

1. Должны ли это быть данные:fileData вместо этого?

2. также опубликуйте свой html

Ответ №1:

Спасибо за усилия, ребята. Я нашел решение. Мне просто нужно сохранить файлы добавления для одного и того же ключа «Вложения». Теперь я могу получить в виде массива HttpPostedFileBase.

  var Data = new FormData();
 $('input').each(function () {
                var type = $(this).attr("type");
                if (type == "file") {
                    var FileData = $(this).get(0).files[0]);
                    Data.append("Attachments", FileData); 
                }
            });    
  

Ответ №2:

Попробуйте:

     var Files = new FormData();    

         $('input').each(function () {
         var type = $(this).attr("type");
          if (type == "file") {
Files .append("Attachment" $(this).attr("id"), $(this).get(0).files[0]);   
                        }
                    });    

        if (url != '') {
            $.ajax({
                url: url,
                data: Files ,
                type: "POST",
                contentType: false,
                processData: false,
                success: function (data) {
                    alert("Saved successfully");
                }
            });
        }
  

Ответ №3:

Именно так я отправлял массив данных из javascript в контроллер mvc, это будет немного длинновато, но я объяснил каждую строку с комментариями, надеюсь, это может вам помочь

javascript:

 var formData = new FormData(); //declare formData
var arrayData = []; //declare array and push/append your data to it.

var name="abc";
arrayData.push(name);

//setting ArrayData to Json Object
var AllData = {
            getUserData: arrayData
        };

//appending Json Object to formdata with the key "mydata"
formData.append("mydata", JSON.stringify(AllData));

//sending formdata through ajax request
$.ajax({
      type: "POST",
      url: yourURLHere,
      processData: false,
      contentType: false,
      data: formData,
      cache: false,
      success: function (data) {
            //your program logic here
      }
});


  

Контроллер:

 public async Task<HttpResponseMessage> SaveResponse()
{

//receiving json data from the key "mydata" we set earlier 
var getData = HttpContext.Current.Request.Params["mydata"];

//deserialize json object (you will need Newtonsoft.Json library)
var model = JsonConvert.DeserializeObject<MyModel>(getData);

//you will get all of your data in model variable
//do what you want to do with that data

}
  

и вот класс модели

 public class MyModel
{
   //**dataList** will receive array data sent from javascript  
   public List<MyModel> dataList = new List<MyModel>();

   //Remember, whatever your push to array in javascript, should be declared here.
   public string name {get;set;}   

}
  

Комментарии:

1. ps> если кто-то может упростить мою логику, пожалуйста, дайте мне знать, это было бы очень ценно.