我正在开发一个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。我该如何隐蔽他们?如果它现在可以转换它们我该怎么办?如何将数据传递给查看?
我建议更新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>