IFormFile является нулевым, Razor - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь связать загрузку изображения, но столкнулся с проблемой при отправке этого изображения в контроллер.

Я использую Razor и .net core 2.2.Мой контроллер

[HttpPost(nameof(MealController))]
        [Authorize(Roles = UserRoles.Moderator)]
        public IActionResult Update(MealModel meal, IFormFile pic)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var changedMeal = _mapper.Map<MealModel, MealDTO>(meal);
                    _mealService.Update(changedMeal, pic);
                }
                catch (Exception e)
                {
                    return NotFound();
                }

                return RedirectToAction("Index");
            }

            return View(meal);
        }

Моя форма

<form class="form" method="post" asp-controller="Meal" asp-action="Update">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="exampleModalLabel">Продукт</h5>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                </div>
                <div class="modal-body">
                    <div class="product">
                        <div class="product-img">
                            <div class="selector">
                                <img src="@Model.ImagePath" class="img-thumbnail" id="selectedImg" alt="Product Image"/>
                                <div class="form-group">
                                    <input type="file" class="custom-file-input" id="pic-input" name="pic"
                                           onchange="readURL(this, 'selectedImg')">
                                    @* <label class="custom-file-label" for="pic-input"></label> *@
                                </div>
                            </div>
                        </div>
                        <div class="product-info">
                            <div class="form-group name">
                                <label for="name">Назва продукту</label>
                                <input class="form-control" type="text" placeholder="Назва" id="name" name="name" asp-for="Name"
                                       value="@Model.Name">
                            </div>

                            <div class="form-group">
                                <label for="name">Ціна</label>
                                <input class="form-control" placeholder="Price" id="price" type="number" asp-for="Price"
                                       value="@Model.Price">
                            </div>
                            <div class="form-group">
                                <label for="name">Вага</label>
                                <input class="form-control" id="weight" type="number" asp-for="Weight"
                                       value="@Model.Weight">
                            </div>

                            <div class="comments">
                                <textarea class="form-control" rows="3" cols="5" placeholder="Склад" asp-for="Description" value="@Model.Description"></textarea>
                            </div>
                            <input type="hidden" asp-for="MealGroupId" value="@Model.MealGroupId"/>
                            <input type="hidden" asp-for="Id" value="@Model.Id"/>
                            @* <input type="hidden" asp-for="ImagePath" value="@Model.ImagePath"/> *@
                        </div>
                    </div>

                </div>
                <div class="modal-footer">
                    <div class="action-button">
                        <button type="submit"
                                class="btn btn-success ok-button">
                            <span>Додати</span>
                        </button>
                        <button type="reset"
                                class="btn btn-danger remove-button">
                            <span>Відмінити</span>
                        </button>
                    </div>
                </div>
            </div>
        </form>

Когда я отлаживаю, IFormFile всегда null.Я пытался использовать [FromForm], но это не помогло.Я погуглил и обнаружил, что мои name в форме и имени параметра отличались, но это имело эффект.Не могли бы вы дать мне небольшую подсказку о том, как я могу это решить.Спасибо и хорошего дня!

1 Ответ

0 голосов
/ 02 июня 2019

Необходимо указать атрибут <form> enctype, установленный на multipart/form-data, чтобы можно было отправлять файлы на сервер

<form class="form" method="post" asp-controller="Meal" asp-action="Update" enctype="multipart/form-data">
...