我一直认为你应该使用ViewModels(和AutoMapper) - 所以这是我最初的步骤。
我只是在寻找一些保证,我正在将我的模型映射到我的viewmodel,当发回时,我正在从返回的viewmodel正确更新数据库记录:
//
// GET: /Customer/EditPartial
public ActionResult EditPartial(int id)
{
var customerVM = db.Customers.Where(x => x.UserName == User.Identity.Name && x.CustomerId == id).FirstOrDefault();
AutoMapper.Mapper.CreateMap<Customer, CustomerViewModel>();
CustomerViewModel customer = AutoMapper.Mapper.Map<Customer, CustomerViewModel>(customerVM);
return PartialView("CustomerPartial2", customer);
}
//
// POST: /Customer/EditPartial
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult EditPartial(CustomerViewModel customerviewmodel)
{
if (ModelState.IsValid)
{
Customer customer = db.Customers.Where(x => x.UserName == User.Identity.Name && x.CustomerId == customerviewmodel.CustomerId).FirstOrDefault();
if (customer == null)
{
return HttpNotFound();
}
customer.CustomerName = customerviewmodel.CustomerName;
customer.Email = customerviewmodel.Email;
db.Entry(customer).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return PartialView("CustomerPartial2", customerviewmodel);
}
那么,我的Get是否正确设置了Automapper?
我从viewmodel更新CustomerName和Email的方式是否正确,或者是否有更简单的方法再次使用AutoMapper?
谢谢,
标记
答案 0 :(得分:1)
如果您正确完成了映射,那么您正确使用它。无论如何,AutoMapper都可以用于get和post。它的唯一目的是将您的一个类映射到另一个类(在您的特定情况下,将域模型映射到视图模型中,反之亦然)。如果映射是正确的(在调试器中),那么你没问题。如果没有 - 让我们知道您遇到了什么问题。
如果您不确定如何使用它,请参阅文章:Visual Studio Magazine的Simplify Your Projections with AutoMapper。
这是ASP.NET MVC的另一个特定内容:Using Automapper with ASP.NET MVC application。
谢谢。
答案 1 :(得分:1)
由于AutoMapper旨在简洁,我认为这段代码会更优雅:
//
// POST: /Customer/EditPartial
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult EditPartial(CustomerViewModel customerviewmodel)
{
if (ModelState.IsValid)
{
Customer customer = db.Customers.Where(x => x.UserName == User.Identity.Name && x.CustomerId == customerviewmodel.CustomerId).FirstOrDefault();
if (customer == null)
{
return HttpNotFound();
}
Mapper.CreateMap<CustomerViewModel , Customer>();
Mapper.Map(customerviewmodel, customer);
db.SaveChanges();
return RedirectToAction("Index");
}
return PartialView("CustomerPartial2", customerviewmodel);
}
在您的代码中没有太多的手动属性分配,但可能会出现您需要使用您的方法键入很多内容的情况。