Попытка загрузить изображение, используя HttpPostedFileBase в модели, но сервер IIS останавливается по неизвестной причине. - PullRequest
0 голосов
/ 25 марта 2019

Я пытался реализовать простую загрузку файлов в моем проекте asp.net mvc.

Сначала я добавил свойство HttpPostedFileBase и пометил его атрибутом NotMapped.В противном случае, если не установить этот атрибут, компилятор выдает исключение: «ArgumentNullException: значение не может быть нулевым.»

public partial class Item
{
    public int Id { get; set; }

    [Required]
    [StringLength(255)]
    public string Name { get; set; }

    public int Sub2Id { get; set; }

    public int? BrandId { get; set; }
    [NotMapped]
    public HttpPostedFileBase ImageFile { get; set; }

Во-вторых, в представлении:

                @model DeltaWebApp.Item

            @{
                ViewBag.Title = "Add image";
                Layout = "~/Views/Shared/_Layout.cshtml";
            }

            <h2>Add image</h2>

            @using (Html.BeginForm("Add", "Image", FormMethod.Post, new { enctype = "multipart/form-data" }))
            {
                @Html.AntiForgeryToken()

                <div class="form-horizontal">
                    <hr />
                    @Html.ValidationSummary(true, "", new { @class = "text-danger" })

                    <div class="form-group">
                        @Html.LabelFor(model => model.Image, "Image Path", htmlAttributes: new { @class = "control-label col-md-2" })
                        <div class="col-md-10">
                            <input type="file" name="ImageFile" required />
                        </div>
                    </div>

                    <div class="form-group">
                        <div class="col-md-offset-2 col-md-10">
                            <input type="submit" value="Create" class="btn btn-default" />
                        </div>
                    </div>
                </div>
            }

            <div>
                @Html.ActionLink("Back to List", "EditManualItemPrices", "ManualPriceEditor")
            </div>

            @section Scripts {
                @Scripts.Render("~/bundles/jqueryval")
            }

Чтобы создать представление, яВы использовали стандартный шаблон создания.И добавьте «input type =» file »name =« ImageFile »required />« Чтобы создать кнопку для загрузки файла.

В-третьих, в контроллере изображений я создал два метода действия:

                    [HttpGet]
                    public ActionResult Add(int id = -1)
                    {
                        if (id == -1)
                        {
                            return RedirectToAction("SelectManuallyUpdatedItemsGroup", "ManualPriceEditor");
                        }

                        using (var db = new ShopContext())
                        {
                            var item = db.Item.FirstOrDefault(x => x.Id == id);
                            return View(item);
                        }
                    }

                    [HttpPost]
                    public ActionResult Add(Item itemOfImage)
                    {
                        using (var db = new ShopContext())
                        {
                            var item = db.Item.FirstOrDefault(x => x.Id == itemOfImage.Id);
                            string filename = item.OneCCode;
                            item.Image = filename;
                            string extension = Path.GetExtension(itemOfImage.ImageFile.FileName);
                            filename += extension;
                            filename = Path.Combine(Server.MapPath("~/Images/"), filename);
                            item.ImageFile.SaveAs(filename);
                            var returnUrl = Request.UrlReferrer;

                            return Redirect(returnUrl.LocalPath);

                        }
                    }

Я собрал и запустил проект в режиме отладки, перешел к Add.cshtml, затем я нажал кнопку загрузки, выбрал изображение и затем нажал ОК ... И мой работающий проект внезапно остановился без ошибок и исключений.Я повторил эту процедуру несколько раз, но результат был тот же.Так что я даже не смог добраться до метода HttpPost.Что я пытался сделать: я ремонтировал VS 2017. Он помог мне несколько раз, но после этого IIS-сервер снова начал останавливаться.Погуглил этот вопрос, но ничего не нашел.Пожалуйста, помогите!

...