public override ActionResult Edit(object id) { return(DataAccess.Work().Get(() => { id = CastId(id); var model = Repository.Get(id); if (model == null) { return (ActionResult)HttpNotFound(); } var viewModel = ModelToViewModel(model); int vehicleId = viewModel.IdFlatWagon ?? viewModel.IdFlatbedTruck ?? viewModel.IdFlatSemiTrailer ?? 0; if (vehicleId != 0) { viewModel.IsoContainer1Mask = GetIsoMask(viewModel.VehicleType, vehicleId); } // Загружаем прицепы TrailerRep.SetParent(model); viewModel.Trailers = TrailerRep.Query.AsEnumerable().Select(Mapper.Map <VehicleTrailerModel>).ToList(); return View(EditName, viewModel); })); }
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); })); }