没有类型为'IEnumerable <selectlistitem>'的ViewData项具有键'...'

时间:2016-12-16 14:43:11

标签: c# asp.net

我想制作一个显示每个类别ID和名称的下拉列表。不幸的是,当我开始时,它显示以下错误: “没有类型'IEnumerable'的ViewData项具有键'......'。”

在视图中:

@model WebApplication1.Models.Zoekitem

@{
    ViewBag.Title = "Create";
}

@Html.DropDownList("list1", ViewBag.categorieBag as SelectList, "-- Select --")

在控制器中:

FAQDBConnection FAQconnection = new FAQDBConnection();
var getlist = FAQconnection.Categorie.ToList();
SelectList list = new SelectList(getlist, "ID", "Naam");
ViewBag.categorieBag = list;

在模型中:

public class Categorie
    {
        [Key]
        public int ID { get; set; }
        public string Naam { get; set; }
    }

    public class FAQDBConnection : DbContext
    {
        public FAQDBConnection()
        : base("FAQDBConnection")
        {
            //disable initializer
            Database.SetInitializer<FAQDBConnection>(null);
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
        public DbSet<Categorie> Categorie { get; set; }
        public DbSet<Zoekitem> Zoekitem { get; set; }
        public DbSet<ZoekitemCategorie> ZoekitemCategorie { get; set; }
    }

每次启动程序时,都会说下拉列表中没有给出第一个字符串的viewdata。在这种情况下:“list1”。

您知道,@model WebApplication1.Models.Zoekitem适用于创建页面中包含的其他一些文本框。

提前致谢!

2 个答案:

答案 0 :(得分:0)

尝试使用IEnumerable<SelectListItem>

替换为SelectedList
@Html.DropDownList("list1", ViewBag.categorieBag as IEnumerable<SelectListItem>, "-- Select --")

答案 1 :(得分:0)

好的,所以在与同事谈论之后,我们设法解决了这个问题。

在我的SQL数据库中,我有第三个表,这个表用于配对来自另外两个表的id。 在我们的控制器中,我们在POST操作方法中有代码,这必须在GET操作方法中。 同样在我们的模型中,我们没有定义我们的键。请注意,在[Key]中定义我们的密钥并不能自行完成。必须添加[Column(Order = 0)][Column(Order = 1)]来定义哪个更重要。

控制器:

// GET: Zoekitem/Create
    public ActionResult Create()
    {
        FAQDBConnection FAQconnection = new FAQDBConnection();
        var getlist = FAQconnection.Categorie.ToList();
        SelectList list = new SelectList(getlist, "ID", "Naam");
        ViewBag.categorieBag = list;

        return View();
    }

    // POST: Zoekitem/Create
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Zoekitem zoekitem, string catID, string catNaam)
    {
        if (ModelState.IsValid)
            {
                db.Zoekitem.Add(zoekitem);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

        return View(db.Categorie.ToList());
    }

型号:

public class ZoekitemCategorie
{
    [Key]
    [Column(Order = 0)]
    public int IDZ { get; set; }
    [Key]
    [Column(Order = 1)]
    public int IDC { get; set; }
}

查看:

@Html.DropDownList("list1", ViewBag.categorieBag as IEnumerable<SelectListItem>, "-- Select --")

(随意纠正错误!)