Как заполнить выпадающий список из значения внешнего ключа в представлении 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"