MVC 6 EF 7屬性的列錶框未填充

asp.net-core-mvc asp.net-mvc-scaffolding entity-framework-core

我已經嘗試了一段時間來填充列錶框,我似乎無法弄明白。我已經非常廣泛地研究了實體框架7文檔,但我還是新手。 MVC6 / EF7還沒有很多教程,所以很難知道將一個實體類與另一個實體類相關聯的最佳實踐是什麼。請原諒問題的長度,我只是想徹底解決。

我正在使用實體框架7,asp.net 5和MVC 6。

重現問題的步驟

  1. 創建一個新的ASP.Net Web應用程序 →項目名稱: ListBox.Web →解決方案ListBox的名稱
  2. 選擇APS.NET 5模板Web應用程序
  3. Models文件夾中創建兩個類

    Parent.cs

    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    namespace ListBox.Web.Models
    {
        public class Parent
        {
            public int ParentId { get; set; }
            [Required]
            public string Name { get; set; }
            public ICollection<Child> Children { get; set; }
        }
    }
    

    Child.cs

    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    namespace ListBox.Web.Models
    {
        public class Parent
        {
            public int ParentId { get; set; }
            [Required]
            public string Name { get; set; }
            public ICollection<Child> Children { get; set; }
        }
    }
    
  4. 使用scaffolding為每個數據類創建控制器和視圖腳手架控制器

  5. _Layout.cshtml添加指向控制器的_Layout.cshtml

    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    namespace ListBox.Web.Models
    {
        public class Parent
        {
            public int ParentId { get; set; }
            [Required]
            public string Name { get; set; }
            public ICollection<Child> Children { get; set; }
        }
    }
    
  6. 創建數據庫

    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    namespace ListBox.Web.Models
    {
        public class Parent
        {
            public int ParentId { get; set; }
            [Required]
            public string Name { get; set; }
            public ICollection<Child> Children { get; set; }
        }
    }
    
  7. 運行Web應用程序

  8. 添加幾個父母。

    在此處輸入圖像描述

  9. 嘗試添加孩子。

    • 顯示父母的下拉框,但下拉框中沒有項目可供選擇
    • 在此處輸入圖像描述
    • 列錶框的HTML是: <select class="form-control" data-val="true" data-val-required="The ParentId field is required." id="ParentId" name="ParentId"></select>

控制器源代碼

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace ListBox.Web.Models
{
    public class Parent
    {
        public int ParentId { get; set; }
        [Required]
        public string Name { get; set; }
        public ICollection<Child> Children { get; set; }
    }
}

子Create.cshtml

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace ListBox.Web.Models
{
    public class Parent
    {
        public int ParentId { get; set; }
        [Required]
        public string Name { get; set; }
        public ICollection<Child> Children { get; set; }
    }
}

一般承認的答案

ChildrenController更改Create()方法,進行更改

    public IActionResult Create()
    {
        ViewData["ParentId"] = new SelectList(_context.Set<Parent>(), "ParentId", "Parent");
        return View();
    }

    public IActionResult Create()
    {
        ViewData["ParentId"] = new SelectList(_context.Set<Parent>(), "ParentId", "Parent");
        return View();
    }

Create.cshtml ,更改

    public IActionResult Create()
    {
        ViewData["ParentId"] = new SelectList(_context.Set<Parent>(), "ParentId", "Parent");
        return View();
    }

    public IActionResult Create()
    {
        ViewData["ParentId"] = new SelectList(_context.Set<Parent>(), "ParentId", "Parent");
        return View();
    }

熱門答案

生成的代碼不正確,這是一個錯誤https://github.com/aspnet/Scaffolding/issues/149

使用“標籤助手”的一種解決方案是:

調節器

...
ViewData["Parents"] = new SelectList(_context.Set<Parent>(), "ParentId", "Name", child.ParentId);
...

視圖

...
ViewData["Parents"] = new SelectList(_context.Set<Parent>(), "ParentId", "Name", child.ParentId);
...



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因