В моем приложении у меня есть пара выпадающих меню, которые я заполняю с помощью ExtensionMethod.После того, как я отлаживаю приложение, я замечаю, что элементы IEnumerable отображаются пустыми, если я выбираю значение
public static IEnumerable<SelectListItem> ToSelectListItem<T>(this IEnumerable<T> items, int selectedValue)
{
return (items == null)
? (IEnumerable<SelectListItem>)Enumerable.Empty<T>()
: items.Select(item => new SelectListItem
{
Text = item.GetPropertyValue("Ime"),
Value = item.GetPropertyValue("Id"),
Selected = item.GetPropertyValue("Id").Equals(selectedValue.ToString())
});
}
. После выбора значения я создал один новый метод с именем ReflectionExtension, которому я передаю имя и идентификатор
public static class ReflectionExtension
{
public static string GetPropertyValue<T>(this T item,string propertyName)
{
return item.GetType().GetProperty(propertyName).GetValue(item).ToString();
}
}
И в методе представления я вызываю SelectListItem
<div class="form-group row">
<div class="col-3">
<text>Vrsta vozila</text>
</div>
<div class="col-5">
<select asp-for="@Model.Garancija.VrsteVozilaID" asp-items="Model.VrstaVozila.ToSelectListItem(Model.Garancija.VrsteVozilaID)" class="form-control"></select>
</div>
</div>
<div class="form-group row">
<div class="col-3">
<text>Marka Vozila</text>
</div>
<div class="col-5">
<select asp-for="@Model.Garancija.MarkaVozilaID" asp-items="Model.MarkeVozila.ToSelectListItem(Model.Garancija.MarkaVozilaID)" class="form-control"></select>
</div>
</div>
После отправки формы я получаю эту ошибку
Я получаю эти данные с помощью View-Model для создания выпадающего меню
public class GarancijaViewModel
{
public ProduzenaGarancija Garancija { get; set; }
public IEnumerable<Cjenovnik> Cijenovnik { get; set; }
public IEnumerable<Gorivo> Gorivo { get; set; }
public IEnumerable<MarkeVozila> MarkeVozila { get; set; }
public IEnumerable<ModeliVozila> ModeliVozila { get; set; }
public IEnumerable<Produkt> Produkt { get; set; }
public IEnumerable<VrstaMjenjaca> VrstaMjenjaca { get; set; }
public IEnumerable<VrstaVozila> VrstaVozila { get; set; }
}
Контроллер для сохранения всего этого поля в базе данных
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using TriglavOsiguranje.Data;
using TriglavOsiguranje.Models.ViewModels;
namespace TriglavOsiguranje.Areas.Uposlenik.Controllers
{
[Area("Uposlenik")]
public class GarancijaController : Controller
{
private readonly ApplicationDbContext _db;
[BindProperty]
public GarancijaViewModel GarancijaVM { get; set; }
public GarancijaController(ApplicationDbContext db)
{
_db = db;
GarancijaVM = new GarancijaViewModel()
{
Gorivo = _db.Gorivo.ToList(),
Cijenovnik = _db.Cjenovnik.ToList(),
MarkeVozila = _db.MarkeVozila.ToList(),
ModeliVozila = _db.Modeli.ToList(),
Produkt = _db.Produkti.ToList(),
VrstaMjenjaca = _db.VrsteMjenjaca.ToList(),
VrstaVozila = _db.VrsteVozila.ToList(),
Garancija = new Models.ProduzenaGarancija()
};
}
public async Task<IActionResult> Index()
{
var garancija = _db.Garancija.Include(m => m.MarkaVozila).Include(m => m.ModelVozila).Include(m => m.VrsteVozila);
return View(await garancija.ToListAsync());
}
//GET : Product Create
public IActionResult Create()
{
return View(GarancijaVM);
}
[HttpPost,ActionName("Create")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> CreatePOST()
{
if(!ModelState.IsValid)
{
return View(GarancijaVM);
}
_db.Garancija.Add(GarancijaVM.Garancija);
await _db.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
}
}
Iпонятия не имею, где я допустил ошибку.Поскольку IEnumerable не может быть инициализирован, так как это интерфейс, я понятия не имею, как решить эту распространенную проблему?Любое предложение ??