Я даю пользователям возможность добавлять изображения для розничного продукта внутри модального окна Добавить / Редактировать продукт.
Модальная модель представления:
public class ProductModalViewModel
{
public ProductModalViewModel()
{
Product = new ProductDTO();
Images = new List<ProductImageViewModel>();
}
public ProductDTO Product { get; set; }
public List<ProductImageViewModel> Images { get; set; }
}
Каждое изображение продукта содержится в егособственный ViewModel, как показано ниже:
Image ViewModel:
public class ProductImageViewModel
{
public ProductImageViewModel()
{
ProductImage = new ProductImageDTO();
}
public ProductImageDTO ProductImage { get; set; }
[DataType(DataType.Upload)]
public IFormFile ImageFile { get; set; }
}
При отправке формы для сохранения продукта (и любых добавленных изображений) мой запрос зависает и отображает "в ожидании" в ChromeИнструменты разработки.Мое действие контроллера никогда не достигается.
Это происходит только тогда, когда я включаю поля ProductImage / ViewModel / Logic в свой проект.Этого не происходило до добавления этой функциональности в модальный режим, и она работает нормально, если я удаляю все поля ProductImage Fields / ViewModel / Logic, а затем снова отправляю.ViewModel?Или это может быть что-то еще.Остальная часть моего кода кода приведена ниже.
Контроллер:
[HttpPost]
public IActionResult SaveProduct([FromForm]ProductModalViewModel model)
{
//save code
}
Представление (модальное):
<form id="formSaveProduct" onsubmit="SaveProduct(event)" enctype="multipart/form-data">
//Other product fields removed for brevity
<div class="row">
<div class="col-md-12">
<ul class="list-group" id="image-list-group">
@for (int i = 0; i < Model.Images.Count(); i++)
{
<partial name="_ImageListItem" for="Images[i]" />
}
</ul>
</div>
</div>
</form>
PartialView (ProductImage):
<li class="list-group-item my-1">
<input type="hidden" asp-for="ProductImage.Id" class="image-id" />
<input type="hidden" asp-for="ProductImage.ProductId" class="image-productid" />
<div class="row">
<div class="col-3">
<input type="text" readonly asp-for="ProductImage.Order" class="image-order" />
</div>
<div class="col-6">
<img src="..\@Model.ProductImage.Path" class="image-display" />
</div>
</div>
</li>
Сценарий:
function SaveProduct(e) {
e.preventDefault(); // prevent standard form submission
$.ajax({
url: "@Url.Action("SaveProduct", "ProductManagement", new { Area = "Admin" })",
method: "post",
data: new FormData($('#formSaveProduct')[0]),
contentType: false,
processData: false,
cache: false,
success: function (result) {
//removed for brevity
}
});
}