IEnumerable <t>项目显示为空

时间:2019-04-30 10:28:34

标签: c# asp.net-core-mvc

在我的应用程序中,我有几个下拉菜单,这些菜单是使用ExtensionMethod填充的。调试应用程序后,我注意到如果我选择value,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的新方法,该方法传递名称和ID

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));
        }

    }
}

我不知道我在哪里犯了错误。由于IEnumerable因为是接口而无法初始化,所以我不知道如何解决此常见问题? 有什么建议吗??

0 个答案:

没有答案