Я пытался реализовать простую загрузку файлов в моем проекте 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-сервер снова начал останавливаться.Погуглил этот вопрос, но ничего не нашел.Пожалуйста, помогите!