使用Automapper将模型传递给ViewModel

问题描述 投票:-1回答:1

我正在开发一个ASP.NET核心项目。我想使用Automapper将模型映射到viewmodel,但是存在下面描述的问题这是MyRepository

 public class MyRepository
 {
     public async Task<IEnumerable<Cars>> GetAllCarsAsync()
    {
        return await _RepositoryContext.Set<Cars>().ToListAsync();
    }
 }

这是MyController

 public class MyController: Controller
 {
    [HttpGET]
    public async Task<IActionResult> Create()
      {
          var car = await _MyRepository.GetAllCarTypesAsync();
          var model = _mapper.Map<IEnumerable<CarsVM>>(car);
          return View(model);
      }
 }

最后这是我的观点

@model  DataLayers.Models.ViewModels.CarsVM

<form " asp-controller="MyController" asp-action="Create">
  <label class="label" asp-for="Carname"></label>
  <input class="input" type="text" asp-for="Carname">
  <select>
     <option> A carType </option>
     <option>A carType </option>
  </select>
</from>

问题出在我的控制器上。 var car返回IEnumerable,然后我们将结果映射到CarsVM。当我通过该模型进行查看时,它预计CarsVM不会是CarsVM的IEnumerable。我该如何隐蔽他们?如果它现在可以转换它们我该怎么办?如何将数据传递给查看?

c# asp.net automapper
1个回答
1
投票

我建议更新automapper行以转换为List而不是IEnumerable接口,以便您可以确保在控制器中实现视图模型。很明显,如果您只能看到存储库返回IEnumerable,那么查看存储库代码。

下面的主要更改是确保AutoMapper映射到视图模型对象列表,并且视图正在接收由这些视图模型对象列表组成的模型。我假设CarsVM对象是单个Cars对象的viewmodel实例。

知识库

public class MyRepository
{
    public async Task<List<Cars>> GetAllCarsAsync()
    {
        return await _RepositoryContext.Set<Cars>().ToListAsync();
    }
}

调节器

public class MyController: Controller
{
    [HttpGET]
    public async Task<IActionResult> Create()
    {
        var car = await _MyRepository.GetAllCarTypesAsync();
        var model = _mapper.Map<List<CarsVM>>(car);
        return View(model);
    }
}

视图

@model List<DataLayers.Models.ViewModels.CarsVM>
<form asp-controller="MyController" asp-action="Create">
    <label class="label" asp-for="Carname"></label>
    <input class="input" type="text" asp-for="Carname">
    <select>
       <option> A carType </option>
       <option>A carType </option>
    </select>
</from>
© www.soinside.com 2019 - 2024. All rights reserved.