После загрузки файла и извлечения FileName я не могу присвоить значение моей модели перед обновлением базы данных.Файл загружен правильно, остальные данные в форме обновлены и ошибок не возникает.
Форма:
<form method="post" enctype="multipart/form-data">
<input asp-for="Product.Name" />
<input type="file" name="ImageFile" />
@for(var i = 0; i < 10; i++) {
<input asp-for="Product.ProductIntervals[i].Name" />
[...]
}
</form>
OnPostAsync:
public async Task<IActionResult> OnPostAsync(CreateEditProduct model, IFormFile imageFile)
{
if (!ModelState.IsValid) return Page();
if (imageFile != null)
{
var fileName = imageFile.FileName;
var uploadPath = Path.Combine(_hostingEnvironment.WebRootPath, "uploads");
imageFile.CopyTo(new FileStream(uploadPath, FileMode.Create));
model.Product.Image = fileName;
}
if (await TryUpdateModelAsync(
model.Product,
"Product",
x => x.Name,
//x => x.Image
))
{
_dbContext.Update(model.Product);
foreach (var x in model.Product.ProductIntervals)
{
bool newInterval = x.Id == Guid.Empty;
var interval = new ProductInterval
{
Id = newInterval ? Guid.NewGuid() : x.Id,
Name = x.Name,
IntervalMonths = x.IntervalMonths,
IntervalDays = x.IntervalDays,
Priority = x.Priority,
ProductId = model.Product.Id,
Status = x.Status
};
if (newInterval)
{
await _dbContext.AddAsync(interval);
}
else
{
_dbContext.Update(interval);
}
}
await _dbContext.SaveChangesAsync();
return RedirectToPage("./index");
}
return Page();
}
Модель:
public class Product
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Image { get; set; }
public IList<ProductInterval> ProductIntervals { get; set; }
}
public class CreateEditProduct {
public Product Product { get; set; }
public IList<ProductCategory> ProductCategories { get; set; }
}
Я пробовал с / без x => x.Изображение в TryUpdateModelAsync без разницы.
Что не так?