Skip to main content
rm signature; added tag
Source Link
svick
  • 24.5k
  • 4
  • 53
  • 89

Thanks for any advice/guidance etc,

Mark

Thanks for any advice/guidance etc,

Mark

Source Link
Mark Tait
  • 111
  • 1
  • 1
  • 2

Using AutoMapper in ASP.Net MVC

I'd like to check my understanding and usage of the AutoMapper in my ASP.Net MVC app.

I setup the maps in Application_Start:

 Mapper.CreateMap<Customer, CustomerViewModel>();
 Mapper.CreateMap<CustomerViewModel, Customer>();
 Mapper.AssertConfigurationIsValid();

To return a list of users associated with the logged in user, in my Customer Controller I have:

    //
    // GET: /Customer/

    public ActionResult Index()
    {
        var customer = db.Customers.Where(x => x.UserName == User.Identity.Name).ToList();
        IList<CustomerViewModel> customerVM = Mapper.Map<IList<Customer>, IList<CustomerViewModel>>(customer);
        return View(customerVM);
    }

To Edit a specific customers details I am using:

    //
    // GET: /Customer/EditPartial
    public ActionResult EditPartial(int id)
    {
        var customer = db.Customers.Where(x => x.UserName == User.Identity.Name && x.CustomerId == id).FirstOrDefault();
        CustomerViewModel customerVM = Mapper.Map<Customer, CustomerViewModel>(customer);
        return PartialView(customerVM);
    }

Where I Post back updates after making changes in the EditPartial view:

    //
    // POST: /Customer/EditPartial
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult EditPartial(CustomerViewModel customerVM)
    {
        if (ModelState.IsValid)
        {
            Customer customer = db.Customers.Where(x => x.UserName == User.Identity.Name && x.CustomerId == customerVM.CustomerId).FirstOrDefault();
            if (customer == null)
            {
                return HttpNotFound();
            }
            customer.CustomerName = customerVM.CustomerName;
            
            // How do I use AutoMapper here, instead of updating the domain model directly
            customer.Email = customerVM.Email;
            db.Entry(customer).State = EntityState.Modified;
            db.SaveChanges();
            /////////////////

            // Now I want to return a customer list again
            // Is this the best way to do it again
            var customer2 = db.Customers.Where(x => x.UserName == User.Identity.Name).ToList();
            IList<CustomerViewModel> customerVM2 = Mapper.Map<IList<Customer>, IList<CustomerViewModel>>(customer2);

            return PartialView("CustomerListPartial", customerVM2);
        }
        this.Response.StatusCode = 400;
        return PartialView("EditPartial", customerVM);
    }

The code above works, I'm just not sure about using AutoMapper in the Post, and if my way of returning a partial list of customers is the best method.

Thanks for any advice/guidance etc,

Mark