#c# #asp.net-core-mvc
#c# #asp.net-core-mvc
Вопрос:
Я пытаюсь загрузить картинку для продукта. Я создал таблицу базы данных с созданными продуктами, из которых мне нужно только обновить столбец с изображением ASP.NET Ядро MVC.
У меня есть этот код ниже и в контроллере HttpPost
, но я получаю null для model.Picture
из представления. Идентификатор правильный, я просто не получаю файл.
Модель продукта:
public partial class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public string Category { get; set; }
public decimal CostToMake { get; set; }
public decimal FinalPrice { get; set; }
public int? OrderId { get; set; }
public string Picture { get; set; }
public virtual Order Order { get; set; }
public List<CartProduct> CartProduct { get; set; }
}
Модель представления продукта:
public class ProductViewModel
{
public int Id { get; set; }
[Required(ErrorMessage = "Please choose image")]
public IFormFile Picture { get; set; }
}
Контроллер продукта:
[HttpGet]
public async Task<IActionResult> AddPicture(int id)
{
return View();
}
[HttpPost]
public async Task<IActionResult> AddPicture(ProductViewModel model)
{
string uniqueFileName = UploadedFile(model);
Product product = new Product();
product.Id = model.Id;
product.Picture = uniqueFileName;
_sqlProduct.UpdatePicture(product);
return RedirectToAction(nameof(GetAllProducts));
}
public string UploadedFile(ProductViewModel model)
{
string uniqueFileName = null;
if (model.Picture != null)
{
string uploadsFolder = Path.Combine(_webHostEnvironment.WebRootPath, "images");
uniqueFileName = Guid.NewGuid().ToString() "_" model.Picture.FileName;
string filePath = Path.Combine(uploadsFolder, uniqueFileName);
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
model.Picture.CopyTo(fileStream);
}
}
return uniqueFileName;
}
Вид продукта:
@model WEBManagerZ.ViewModels.ProductViewModel
@{
}
<form asp-action="AddPicture">
<div class="form-group">
<label asp-for="Picture" class="control-label"></label>
<div class="custom-file">
<input type="file" asp-for="Picture" class="custom-file-input" id="customFile">
<label class="custom-file-label" for="customFile">Choose file</label>
</div>
<span asp-validation-for="Picture" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="submit" class="btn btn-sm btn-primary rounded-0 text-uppercase" />
</div>
</form>
@section scripts{
<script type="text/javascript">
$(".custom-file-input").on("change", function () {
var fileName = $(this).val().split("\").pop();
$(this).siblings(".custom-file-label").addClass("selected").html(fileName);
});
</script>
}
Ответ №1:
<form enctype="multipart/form-data" asp-action="AddPicture">
Обнаружена проблема с добавлением enctype в форму.
Комментарии:
1. Aniki прав <form enctype=»multipart/form-data» asp-action=»AddPicture»>