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 웹 응용 프로그램 만들기 â '프로젝트 이름 : ListBox.Web â †'솔루션 이름 ListBox
  2. APS.NET 5 템플릿 선택 â † ' 웹 애플리케이션
  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. 스캐 폴딩을 사용하여 각 데이터 클래스에 대한 컨트롤러 및 뷰 생성 스캐 폴딩 컨트롤러

  5. _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. 웹 응용 프로그램 실행

  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는 합법적입니까? 예, 이유를 알아보십시오.