#c# #asp.net #automapper
#c# #asp.net #automapper
Вопрос:
Я работаю над ASP.NET основной проект. Я хочу сопоставить модель с viewmodel с помощью Automapper, но есть проблема, которая описана ниже, это 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. как я могу их скрыть? И если теперь их можно преобразовать, что мне делать? как я могу передать свои данные для просмотра?
Комментарии:
1. Вы никогда не сможете взять что-либо перечисляемое и назначить это неисчислимому контейнеру.
2. @ErikPhilips Итак, каково решение? что мне делать?? должен ли я создать новый репозиторий??
3. Понятия не имею. Вы не объяснили, что вы пытаетесь сделать, просто что не работает. Как выглядит ваше представление? Вам нужны все машины или 1 машина?
4. @ErikPhilips На самом деле это представление является представлением создания. В этом представлении администраторы могут добавлять car. Администраторы также могут выбрать CarType из выпадающего списка, который получает свои данные из базы данных. И если вам понадобится дополнительная информация, просто скажите мне, какая часть необходима, я добавлю ее.
5. Что такое
CarsVM
?
Ответ №1:
Я бы предложил обновить строку automapper для преобразования в список вместо интерфейса IEnumerable, чтобы вы могли убедиться, что модель представления материализована в контроллере. Это очевидно, глядя на код репозитория, но не в том случае, если вы видите, что репозиторий возвращает только IEnumerable.
Основные изменения, приведенные ниже, направлены на то, чтобы AutoMapper отображался в список объектов модели представления и чтобы представление получало модель, составленную из списка этих объектов модели представления. Я предположил, что объект CarsVM является экземпляром viewmodel одного объекта Cars.
Репозиторий
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>