IEnumerable <T>элементы показывают ноль - PullRequest
1 голос
/ 30 апреля 2019

В моем приложении у меня есть пара выпадающих меню, которые я заполняю с помощью 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>

enter image description here

После отправки формы я получаю эту ошибку

enter image description here

Я получаю эти данные с помощью 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 не может быть инициализирован, так как это интерфейс, я понятия не имею, как решить эту распространенную проблему?Любое предложение ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...