C# 如何在编辑操作中使用ViewModels而无需发出其他请求?
我需要一个关于这个特殊案例的具体答案或解决方案, 我有C# 如何在编辑操作中使用ViewModels而无需发出其他请求?,c#,asp.net-mvc,asp.net-mvc-5,C#,Asp.net Mvc,Asp.net Mvc 5,我需要一个关于这个特殊案例的具体答案或解决方案, 我有EditVehicleViewModel,它被传递给编辑车辆控制器操作,如下所示 public async Task<ActionResult> Edit(EditVehicleViewModel vehiclViewModel) { if (ModelState.IsValid) { // I NEED TO MAP THE VIEW_MODEL TO THE MODEL HERE
EditVehicleViewModel
,它被传递给编辑车辆控制器操作,如下所示
public async Task<ActionResult> Edit(EditVehicleViewModel vehiclViewModel)
{
if (ModelState.IsValid)
{
// I NEED TO MAP THE VIEW_MODEL TO THE MODEL HERE
db.Entry(vehicleModel).State = EntityState.Modified;
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(vehiclViewModel);
}
编辑
这是我的模型和视图模型
视图模型
型号
公共级车辆
{
公共int ID{get;set;}
[必需]
公共字符串许可证号码{get;set;}
[必需]
公共可为空的年份{get;set;}
[必需]
公共字符串颜色{get;set;}
[数据类型(DataType.ImageUrl)]
公共字符串ImageUrl{get;set;}
[必需]
公共字符串编号{get;set;}
}
如果这不正确,很抱歉。我仍然不太确定vehicleModel在哪里
public async Task<ActionResult> Edit(EditVehicleViewModel vehiclViewModel)
{
if (ModelState.IsValid)
{
// I am guessing the VINNumber is the identifier
Vehicle vModel = db.Vehicle.FirstOrDefault(v => v.VINNumber == vehiclViewModel.VINNumber);
// Mapping here
vModel.LicenceNumber = vehiclViewModel.LicenceNumber;
vModel.Year = vehiclViewModel.Year;
vModel.Color = vehiclViewModel.Color;
vModel.VINNumber = vehiclViewModel.VINNumber
vModel.ImageUrl = vehiclViewModel.ImageUrl;
db.Entry(vModel).State = vModel.ID == 0 ? EntityState.Added : EntityState.Modified;
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(vehiclViewModel);
}
在查找需要保存的车辆时,可以将其用作标识符如果这不正确,请道歉。我仍然不太确定vehicleModel在哪里
public async Task<ActionResult> Edit(EditVehicleViewModel vehiclViewModel)
{
if (ModelState.IsValid)
{
// I am guessing the VINNumber is the identifier
Vehicle vModel = db.Vehicle.FirstOrDefault(v => v.VINNumber == vehiclViewModel.VINNumber);
// Mapping here
vModel.LicenceNumber = vehiclViewModel.LicenceNumber;
vModel.Year = vehiclViewModel.Year;
vModel.Color = vehiclViewModel.Color;
vModel.VINNumber = vehiclViewModel.VINNumber
vModel.ImageUrl = vehiclViewModel.ImageUrl;
db.Entry(vModel).State = vModel.ID == 0 ? EntityState.Added : EntityState.Modified;
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(vehiclViewModel);
}
然后,当查找需要保存的车辆时,可以将其用作标识符。首先,您必须从nuget安装以下任何一个软件包 PM>安装程序包TinyMapper 或 PM>安装软件包自动映射器 如果使用tinymapper,则添加代码
TinyMapper.Bind<Vehicle, EditVehicleViewModel>();
Vehicle vehicleModel = TinyMapper.Map<EditVehicleViewModel>(vehiclViewModel);
db.Entry(vehicleModel).State = EntityState.Modified;
TinyMapper.Bind();
车辆模型=TinyMapper.Map(车辆视图模型);
db.Entry(vehicleModel).State=EntityState.Modified;
或
如果使用automapper
Mapper.CreateMap<Vehicle , EditVehicleViewModel>();
Vehicle vehicleModel = Mapper.Map<EditVehicleViewModel>(vehiclViewModel);
db.Entry(vehicleModel).State = EntityState.Modified;
Mapper.CreateMap();
Vehicle vehicleModel=映射器映射(vehiclViewModel);
db.Entry(vehicleModel).State=EntityState.Modified;
首先,您必须从nuget安装以下任何一个软件包
PM>安装程序包TinyMapper
或
PM>安装软件包自动映射器
如果使用tinymapper,则添加代码
TinyMapper.Bind<Vehicle, EditVehicleViewModel>();
Vehicle vehicleModel = TinyMapper.Map<EditVehicleViewModel>(vehiclViewModel);
db.Entry(vehicleModel).State = EntityState.Modified;
TinyMapper.Bind();
车辆模型=TinyMapper.Map(车辆视图模型);
db.Entry(vehicleModel).State=EntityState.Modified;
或
如果使用automapper
Mapper.CreateMap<Vehicle , EditVehicleViewModel>();
Vehicle vehicleModel = Mapper.Map<EditVehicleViewModel>(vehiclViewModel);
db.Entry(vehicleModel).State = EntityState.Modified;
Mapper.CreateMap();
Vehicle vehicleModel=映射器映射(vehiclViewModel);
db.Entry(vehicleModel).State=EntityState.Modified;
vehicleModel“来自哪里。您已将其声明为条目。。但它在哪里?也许你可以添加viewmodel本身。也许有点帮助“车辆模型”是从哪里来的。您已将其声明为条目。。但它在哪里?也许你可以添加viewmodel本身。可能会有点帮助谢谢你的回答,我想这是我需要的,但这不是避免服务器再次受到攻击的最佳实践,而只是抓住现有的模型,有没有办法做到这一点,还是我必须满足于额外的攻击?Vehicle vModel=db.Vehicle.FirstOrDefault(v=>v.VINNumber==vehiclViewModel.VINNumber);这一个,是额外的还是不可避免的?谢谢你的回答,我认为这是我需要的,但这不是避免服务器再次受到攻击的最佳实践,而只是抓住现有的模型,有没有办法做到这一点,还是我必须满足于额外的攻击?Vehicle vModel=db.Vehicle.FirstOrDefault(v=>v.VINNumber==vehiclViewModel.VINNumber);这一个,是额外的还是不可避免的?
Mapper.CreateMap<Vehicle , EditVehicleViewModel>();
Vehicle vehicleModel = Mapper.Map<EditVehicleViewModel>(vehiclViewModel);
db.Entry(vehicleModel).State = EntityState.Modified;