#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> если кто-то может упростить мою логику, пожалуйста, дайте мне знать, это было бы очень ценно.