Tôi mới sử dụng ASP.net MVC và đang sử dụng chế độ xem viewmodel thay vì viewbags để điền vào danh sách thả xuống của tôi vì tôi đã thấy hầu hết mọi người đề xuất chống lại chúng. Tôi có một giao diện người dùng slick mà cascading dropdowns và autocompletes (không được hiển thị ở đây) nhưng tôi dường như không thể có được dữ liệu của tôi lưu lại cơ sở dữ liệu.Lưu dữ liệu ViewModel vào Cơ sở dữ liệu trong ASP.NET MVC
Models:
public partial class Car
{
public int CarID { get; set; }
public string CarName { get; set; }
public int ModelID { get; set; }
public int ManufacturerID { get; set; }
public int CarColorID { get; set; }
public Nullable<decimal> Price { get; set; }
public string Description { get; set; }
public virtual CarColor CarColor { get; set; }
public virtual Manufacturer Manufacturer { get; set; }
public virtual CarModel CarModel { get; set; }
}
public partial class CarColor
{
public CarColor()
{
this.Cars = new HashSet<Car>();
}
public int ColorID { get; set; }
public string ColorName { get; set; }
public virtual ICollection<Car> Cars { get; set; }
}
public partial class CarModel
{
public CarModel()
{
this.Cars = new HashSet<Car>();
}
public int CarModelID { get; set; }
public int ManufacturerID { get; set; }
public string CarModelName { get; set; }
public virtual ICollection<Car> Cars { get; set; }
public virtual Manufacturer Manufacturer { get; set; }
}
public partial class Manufacturer
{
public Manufacturer()
{
this.Cars = new HashSet<Car>();
this.Manufacturer1 = new HashSet<Manufacturer>();
this.CarModels = new HashSet<CarModel>();
}
public int ManufacturerID { get; set; }
public string ManufacturerName { get; set; }
public Nullable<int> ParentID { get; set; }
public virtual ICollection<Car> Cars { get; set; }
public virtual ICollection<Manufacturer> Manufacturer1 { get; set; }
public virtual Manufacturer Manufacturer2 { get; set; }
public virtual ICollection<CarModel> CarModels { get; set; }
}
ViewModel:
Bộ điều khiển:
public ActionResult Create()
{
var model = new AnotherTestViewModel();
using (new CarTestEntities())
{
model.CarModels = db.CarModels.ToList().Select(x => new SelectListItem
{
Value = x.CarModelID.ToString(),
Text = x.CarModelName
});
model.Manufacturers = db.Manufacturers.ToList().Select(x => new SelectListItem
{
Value = x.ManufacturerID.ToString(),
Text = x.ManufacturerName
});
model.CarColors = db.CarColors.ToList().Select(x => new SelectListItem
{
Value = x.ColorID.ToString(),
Text = x.ColorName
});
}
return View(model);
}
//
// POST: /AnotherTest/Create
[HttpPost]
public ActionResult Create(AnotherTestViewModel model)
{
if (ModelState.IsValid)
{
db.Entry(model).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Details", "AnotherTestViewModel", new { id = model.car.CarID });
}
return View();
}
tôi thấy một vài khuyến nghị sử dụng Automapper vì EntityState.Modified sẽ không làm việc, nhưng tôi 'không chắc chắn làm thế nào để cấu hình nó bởi vì bằng cách sử dụng mã dưới đây đã không làm việc.
Mapper.CreateMap<AnotherTestViewModel, Car>();
Mapper.CreateMap<Car, AnotherTestViewModel>();
var newCar = Mapper.Map<AnotherTestViewModel, Car>(model);
Bất kỳ ý tưởng nào?
Cảm ơn bạn rất nhiều! Đó chính xác là sự giúp đỡ tôi cần. – Jim
Chức năng "UpdateCar" này hoạt động ở đâu? Bạn nói trong một số loại "Lớp dịch vụ", bạn có thể chính xác hơn không? Cảm ơn! – crunchy
Dịch vụ thực sự không nên biết gì về giao diện người dùng. Vì vậy, chuyển đổi này sang tên miền/mô hình dữ liệu của bạn nên được thực hiện trong bộ điều khiển của bạn. Sau đó, bạn chuyển qua mô hình miền/dữ liệu sang phương thức lớp dịch vụ của bạn, thực hiện cập nhật. – RiceRiceBaby