Не могу отправить массив js через formdata в контроллер (моя модель представления не привязывается к нему) [закрыто]Javascript

Форум по Javascript
Ответить
Anonymous
 Не могу отправить массив js через formdata в контроллер (моя модель представления не привязывается к нему) [закрыто]

Сообщение Anonymous »

это моя страница обновления продукта. Когда пользователь нажимает кнопку обновления, детали предварительно загружаются здесь через модель представления, отправленную действием.
Пользователь может видеть ранее загруженные изображения, и, поскольку я не могу предварительно загрузить их с помощью входных изображений, я использую функцию js, которая предварительно загружает и помещает строку (местоположение изображения) в массив под названием uploadediamges.
Вы можете спросить, почему я предварительно загружаю изображения, ответ таков: администратор может удалить предыдущие изображения или измените основное изображение.
все в порядке, пока я не захочу опубликовать их в действии (подробности о продуктах, новое загруженное изображение через вход, предварительно загруженный массив Diamges, который (id,url,ismain)). Мне нужно использовать данные формы, а не публиковать данные, потому что у меня есть файлы, почему я говорю это, потому что, когда я использую postdata в js, я действительно могу отправлять и находить массив загруженных изображений в существующие изображения продуктов в модели просмотра, но с данными публикации я не могу. буду признателен за помощь
моя функция

let featureCounter = @(Model.Features?.Count() ?? 0);
let uploadedImages = []; // { id, url, file?, isMain }

const pictures = @Html.Raw(Json.Serialize(ViewBag.Pictures ?? new List()));





function UpdateProduct() {

let data

= new FormData();

// Append basic product fields
data.append('Id', $("#Id").val());
data.append('Name', $("#Name").val());
data.append('Description', $("#Description").val());
data.append('HowToUse', $("#HowToUse").val());
data.append('Price', $("#Price").val());
data.append('Stock', $("#Stock").val());
data.append('BrandId', $("#BrandId").val());
data.append('CategoryId', $("#CategoryId").val());
data.append("ExistingProductPicturesJson", JSON.stringify(uploadedImages));

// Append dynamic features
$("[name^='Features']").each(function () {
data.append($(this).attr("name"), $(this).val());
});

// Append uploaded files (correct ID)
const productImages = document.getElementById("productImages");
if (productImages && productImages.files.length > 0) {
for (let i = 0; i < productImages.files.length; i++) {
data.append("Pictures", productImages.files);
}
}

$.ajax({
url: '@Url.Action("UpdateProduct", "Product", new { area = "Admin" })',
type: "POST",
data: data,
processData: false,
contentType: false,
success: function (data) {
if (data.isSuccess) {
swal.fire('موفق!', data.message, 'success')
.then(() => location.reload());
} else {
swal.fire('هشدار!', data.message, 'warning');
}
},
error: function (request) {
alert(request.responseText);
}
});
}



мой js-файл, который заполняет предварительно загруженные изображения, здесь
document.addEventListener('DOMContentLoaded', function () {
try {
preloadImagesFromServer();
} catch (error) {
console.error('Add product page error:', error);
}
});

// ---------- Preload Images ----------
function preloadImagesFromServer() {
const preview = document.getElementById('imagesPreview');
if (!preview) return;

uploadedImages = []; // reset before preloading
preview.innerHTML = '';

const mainPic = "@ViewBag.Main"; // optional main pic from server

pictures.forEach((url, index) => {
const isMain = url === mainPic || (!uploadedImages.some(img => img.isMain) && index === 0);
uploadedImages.push({ id: index, url: url, isMain: isMain });

const imageItem = document.createElement('div');
imageItem.className = 'image-preview-item';
imageItem.id = `image-${index}`;
imageItem.innerHTML = `
Изображение
×

${isMain ? '✓ اصلی' : 'انتخاب اصلی'}

`;
preview.appendChild(imageItem);
});

// Ensure one image is main
if (!uploadedImages.some(img => img.isMain) && uploadedImages.length > 0) {
setMainImage(uploadedImages[0].id);
}
}

моя модель просмотра
namespace PetPaw.EndPoint.Areas.Admin.Models.ViewModels.Product
{
public class NewProductViewModel
{
public long Id { get; set; }
public string Name { get; set; }
public string? Description { get; set; }
public string? HowToUse { get; set; }
public decimal Price { get; set; }
public int Stock { get; set; }
public long CategoryId { get; set; }
public long BrandId { get; set; }
public long AnimalId { get; set; }

public bool IsActive { get; set; }
public int MainPictureIndex { get; set; }
public List ExistingProductPictures { get; set; } = new List();

public List Pictures { get; set; }=new List();
public List Features { get; set; }=new List();
}
public class ExistingProductPicture
{
public long id { get; set; }
public string url { get; set; }
public bool isMain { get; set; }
}

}


Подробнее здесь: https://stackoverflow.com/questions/798 ... bind-to-it
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»