ujjwal uniyal Ответов: 0

Как заполнить выпадающий список из значения внешнего ключа в представлении MVC?


У меня есть 3 таблицы тема , тема и подтема. тема имеет subjectID в качестве внешнего ключа, а подтема имеет идентификатор темы в качестве внешнего ключа. Сначала я использую EF6 DB для создания классов моделей.

Я создал Create view для subject, который отлично работает. Теперь я хочу создать представление create для Topic. after scaffolding он создал представление для меня, и я могу видеть код dropdownlist, сгенерированный там для subjects. когда когда я запускаю его я получаю ошибку
"
There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'SubjectId
"

Таким образом , я получаю, что, поскольку я ничего не передаю методу get, он не может заполнить выпадающий список. Вопрос в том, как мне это сделать.

это мой предметный класс

public partial class Subject
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Subject()
        {
            this.Topics = new HashSet<Topic>();
        }
    
        public int Id { get; set; }
        public string SubjectName { get; set; }
        public string LogoPath { get; set; }
        public string LogoName { get; set; }
        public Nullable<System.DateTime> CreatedDate { get; set; }
        public Nullable<System.DateTime> ModifiedDate { get; set; }
        public Nullable<bool> IsActive { get; set; }
    
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Topic> Topics { get; set; }
    }


это тематический класс

public partial class Topic
   {
       [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
       public Topic()
       {
           this.SubTopics = new HashSet<SubTopic>();
       }

       public int Id { get; set; }
       public Nullable<int> SubjectId { get; set; }
       public string TopicName { get; set; }
       public string TopicLogoPath { get; set; }
       public string TopicLogoName { get; set; }
       public string Description { get; set; }
       public Nullable<System.DateTime> CreatedDate { get; set; }
       public Nullable<System.DateTime> ModifiedDate { get; set; }
       public Nullable<bool> IsActive { get; set; }

       public virtual Subject Subject { get; set; }
       [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
       public virtual ICollection<SubTopic> SubTopics { get; set; }
   }



Как правильно окукливать выпадающий список тем в теме и выпадающий список тем в подтеме?
Любая помощь рода очень ценится.

Спасибо

Что я уже пробовал:

Я попытался создать класс ViewModel с IEnumerable<subject> feild. Затем я заполнил это поле в методе get, который затем передаю в представление.

public class TopicVM
   {
       public int Id { get; set; }
       public Nullable<int> SubjectId { get; set; }
       public string TopicName { get; set; }
       public string TopicLogoPath { get; set; }
       public string TopicLogoName { get; set; }
       public string Description { get; set; }
       public Nullable<System.DateTime> CreatedDate { get; set; }
       public Nullable<System.DateTime> ModifiedDate { get; set; }
       public Nullable<bool> IsActive { get; set; }

       public IEnumerable<Subject> Subjects { get; set; }

   }


это метод, который заполняет свойство

public TopicVM GetList()
        {
            TopicVM topicVM = new TopicVM();
            topicVM.Subjects = _entities.Subjects.Where(x => x.IsActive == true).Select(x=>x).ToList();
            return topicVM;
        }


Теперь, когда я пытаюсь добавить представление, используя TopicVM в качестве класса модели, я получаю ошибку "невозможно восстановить метаданные для QR.ViewModels.TopicVM"

0 Ответов