У меня есть 3 модели (укороченный):Извлечение точных данных из Viewmodel для отправки на просмотр с тремя моделями?
модель курса:
public int CourseID { get; set; }
public string Meta { get; set; }
public string Title { get; set; }
public string titleabbrev { get; set; }
public virtual ICollection<course_section> course_sections { get; set; }
курс раздел Модель:
[Key]
public int SectionID { get; set; }
[ForeignKey("Course_page")]
public int CourseID { get; set; }
public string Title { get; set; }
public string Colour_class { get; set; }
public int Order { get; set; }
public virtual Course_page Course_page { get; set; }
public virtual ICollection<course_subsection> course_subsections { get; set; }
курс Подраздел модель:
[Key]
public int SubSectionID { get; set; }
[ForeignKey("course_section")]
public int SectionID { get; set; }
public string Title { get; set; }
public string Icon_class { get; set; }
public string Colour_class { get; set; }
public string Link { get; set; }
public int Order { get; set; }
public string Titleabbrev { get; set; }
public string Pagecontent { get; set; }
public virtual course_section course_section { get; set; }
Они объединены в вид модели:
public class CourseViewModel
{
public IEnumerable<Course_page> Course_page { get; set; }
public IEnumerable<course_section> Course_section { get; set; }
public IEnumerable<course_subsection> Course_subsection { get; set; }
}
На мой взгляд, у меня есть три петли foreach, предназначенные для печати на странице разделов и соответствующих подразделов по порядку.
В моем контроллере для зрения у меня есть следующий:
public ActionResult Course_page(string courseabbrev)
{
var viewModel = new CourseViewModel();
viewModel.Course_page = db.Course_page
.Where(i => i.titleabbrev == courseabbrev)
.Include(i => i.course_sections.Select(c => c.course_subsections));
viewModel.Course_section = viewModel.Course_page.Where(i => i.titleabbrev == courseabbrev)
.Single().course_sections
.OrderBy(i => i.Order);
//viewModel.Course_subsection = db.course_subsection.ToList()
// .OrderBy(i => i.Order);
viewModel.Course_subsection = viewModel.Course_section.First().course_subsections;
return View(viewModel);
}
Я пытаюсь отправить к представлению, только разделы и подразделы для курса, выбранного при загрузке страницы. В настоящее время я могу получить страницу, чтобы появиться, как я хотел бы с помощью линии комментировал выше:
viewModel.Course_subsection = db.course_subsection.ToList()
.OrderBy(i => i.Order);
Тогда на мой взгляд, я использую, если заявление в 3-м цикле Еогеасп для соответствовать sectionID в viewModel.Course_section с sectionID в viewModel.Course_subsection, чтобы он печатал только соответствующие подразделы для этого раздела.
Это работает, но кажется излишним, поскольку я отправляю список всех подразделов на страницу.
Другая альтернатива, которую можно увидеть в контроллере:
viewModel.Course_subsection = viewModel.Course_section.First().course_subsections;
Это будет только отправить обратно первую группу course_subsections, потому что, конечно, я использую в первую очередь().
Мой вопрос: каков наилучший способ отправки этих данных на представление? Есть ли способ, по которому я могу отправлять только те подразделы, которые мне нужны?
Благодаря
Это замечательно, именно ответ мне было нужно, спасибо. – Rob
отметьте это как правильный ответ – lstern