public override ActionResult PostEdit([ModelBinder(typeof(VehicleTrailerBinder))] VehicleModel viewModel) { return(DataAccess.Work().Get(() => { TypeDescriptor .GetProperties(viewModel) .Cast <PropertyDescriptor>() .Where(p => p.HasAttribute <VehicleTypeAttribute>()) .Select(p => new { Property = p, Attribute = p.Attributes <VehicleTypeAttribute>().First() }) .Where(x => (x.Attribute.VehicleType & (VehicleType)viewModel.VehicleType) == 0) .ToList() .ForEach(x => { x.Property.SetValue(viewModel, null); }); if (ModelState.IsValid) { IList <VehicleTrailerModel> trailers = new List <VehicleTrailerModel>(); var model = ViewModelToModel(viewModel); TrailerRep.SetParent(model); TrailerRep.DeleteAll(); foreach (var item in viewModel.Trailers) { var trailer = TrailerRep.Create(); Mapper.Map(item, trailer); TrailerRep.Save(trailer); Mapper.Map(trailer, item); trailers.Add(item); } Repository.Update(model); viewModel = ModelToViewModel(model); viewModel.Trailers = trailers; } return View(EditName, viewModel); })); }
public override ActionResult PostCreate([ModelBinder(typeof(VehicleTrailerBinder))] VehicleModel viewModel) { return(DataAccess.Work().Get(() => { if (ModelState.IsValid) { var trailers = viewModel.Trailers; var model = ViewModelToModel(viewModel); Repository.Save(model); viewModel = ModelToViewModel(model); TrailerRep.SetParent(viewModel.Id); foreach (var item in trailers) { var trailer = TrailerRep.Create(); Mapper.Map(item, trailer); TrailerRep.Save(trailer); Mapper.Map(trailer, item); viewModel.Trailers.Add(item); } } return View(CreateName, viewModel); })); }