Я создаю приложение ASP. NET MVC и пытаюсь сохранить в своей базе данных изображение, которое будет прикреплено к автомобилю, чтобы я мог отобразить его позже. Когда я запускаю свой код, я могу создать новый автомобиль и сохранить изображение в папке, но в базу данных для таблицы изображений не добавляется информация.
Это мой контроллер:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(HttpPostedFileBase[] files, [Bind(Include = "CarID,Year,Color,Mileage,Cost,MarketValue,BodyType,Drive,Notes,Available,VinNumber,CarLotID,ModelID")] Car car)
{
if (ModelState.IsValid)
{
foreach (HttpPostedFileBase file in files)
{
//Checking file is available to save.
if (file != null)
{
var InputFileName = Path.GetFileName(file.FileName);
var ServerSavePath = Path.Combine(Server.MapPath("~/CarImages/") + InputFileName);
//Save file to server folder
file.SaveAs(ServerSavePath);
var image = new Image()
{
ImagePath = ServerSavePath,
Title = ServerSavePath
};
car.Images.Add(image);
//assigning file uploaded status to ViewBag for showing message to user.
ViewBag.UploadStatus = files.Count().ToString() + " files uploaded successfully.";
}
}
db.Cars.Add(car);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.MakeID = new SelectList(db.Makes, "MakeID", "Name", car.Model?.MakeID);
ViewBag.ModelID = new SelectList(db.Models, "ModelID", "Name", car.ModelID);
ViewBag.CarLotID = new SelectList(db.CarLots, "CarLotID", "LotName", car.CarLotID);
return View(car);
}
Это мой модельный класс для Image
:
public partial class Image
{
public int ImageID { get; set; }
public int CarID { get; set; }
public string Title { get; set; }
public string ImagePath { get; set; }
public HttpPostedFileBase ImageFile { get; set; }
public virtual Car Car { get; set; }
}
Это мой модельный класс для Car
:
using System;
using System.Collections.Generic;
using System.ComponentModel;
public partial class Car
{
public int CarID { get; set; }
public string Year { get; set; }
public string Color { get; set; }
public string Mileage { get; set; }
public decimal Cost { get; set; }
public string BodyType { get; set; }
public string Drive { get; set; }
public string Notes { get; set; }
public bool Available { get; set; }
public string VinNumber { get; set; }
public int CarLotID { get; set; }
public int ModelID { get; set; }
public virtual ICollection<Image> Images { get; set; }
public virtual CarLot CarLot { get; set; }
public HttpPostedFileBase[] files { get; set; }
}
Это мой вид
@model IgnitionHub2._0.Models.Car
@using IgnitionHub2._0.Models
@{
ViewBag.Title = "Create";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Create</h2>
@using (Html.BeginForm("Create", "Car", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Car</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Year, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Year, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Year, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.files, "Add an Image", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(model => model.files, "", new { @type = "file", @multiple = "multiple" })
@Html.ValidationMessageFor(model => model.files, "", new { @class = "text-danger" })
</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>
}
Я удалил большинство выпадающих списков для представления сообщения, чтобы оно не было слишком длинным.
Пожалуйста, помогите! Спасибо!