Запрос AJAX останавливается и никогда не достигает действия.
Это известная проблема, которая была исправлена в v3.0.0-preview
и не будет объединена с веткой 2.2.x
.См. # 4802 .
При публикации формы с IList<Something> Something
, где Something
имеет свойство IFormFile
напрямую , это приведет к бесконечному циклу .Поскольку привязка модели происходит до вызова метода действия, вы обнаружите, что она никогда не входит в метод действия.Кроме того, если вы осмотрите диспетчер задач, вы обнаружите, что использование памяти сумасшедшим.
Чтобы обойти это, как предлагает @ WahidBitar , просто создайте оболочку на IFormFile
так что Something
не имеет IFormFile
напрямую.
Что касается самого вопроса, измените код следующим образом:
public class ProductViewModel
{
public ProductDTO Product { get; set; }
public List<ProductImageViewModel> Images { get; set; }
}
public class ProductImageViewModel
{
public ProductImageDTO ProductImage { get; set; }
// since this ProductImageViewModel will be <b>embedded as List<ProductImageViewModel></b>
// make sure it <b>has no IFormFile property directly</b>
<strike>public IFormFile ImageFile { get; set; }</strike>
<b>public IFormFileWrapper Image{ get; set; }</b>
// a dummy wrapper
<b>public class IFormFileWrapper</b>
<b>{</b>
<b> public IFormFile File { get; set;}</b>
<b>}</b>
}
Теперь ваша сторона клиента должна переименовать имя поля, как показано ниже:
Images[0].ProductImage.Prop1 # Your DTO prop's
Images[0].Image.File # instead of Images[0].ImageFile
Images[0].ProductImage.Prop2 # Your DTO prop's
Images[1].Image.File # instead of Images[1].ImageFile
... # other images
Product.Prop1
Product.Prop2
... # other props of Product
A РабочийДемо: