Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在编辑操作中使用ViewModels而无需发出其他请求?_C#_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

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;