2016-11-03 5 views
2

Я действительно не знаю правильных слов, чтобы задать вопрос, который мне нужен, что означает, что я действительно ничего не получаю от google, поэтому я просто собираюсь создать простой пример. Если вы можете ответить на мой вопрос или просто указать мне в сторону того, что мне нужно искать, это было бы здорово.Как отобразить значение для поля объекта, находящегося внутри объекта?

Скажем, у меня есть эти классы:

public class Teacher 
{ 
    public int teacherID { get; set; } 
    public string name { get; set; } 
} 

public class Course 
{ 
    [Key] 
    public int ID { get; set; } 
    public string courseName { get; set; } 
    public int? teacherID { get; set; } 
    public Teacher teacher { get; set; } 
} 

public class schoolDBContext : DbContext 
{ 
    public DbSet<Course> Courses { get; set; } 
    public DbSet<Teacher> Teachers { get; set; } 
} 

Как отобразить в HTML имя учителя при показе курса. Например, когда у меня есть то, что ниже для представления, имя учителя пустое. Что мне нужно изменить, чтобы отобразилось имя учителя для курса?

<table class="table"> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.Name) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.teacher.Name) 
     </th> 
    </tr> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Name) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.teacher.Name) 
     </td> 
    </tr> 
} 

Это конфигурация, которую я перезаписаны около 30 раз:

protected override void Seed(school.Models.schoolDBContext context) 
     { 
      context.Courses.AddOrUpdate(i => i.ID, 
       new Course 
       { 
        courseName = "Math", 
        teacher = new Teacher { teacherID = 1, name = "Ms. Brooks" }, 
        teacherID = 1 
       }, 
       new Course 
       { 
        courseName = "Science", 
        teacher = new Teacher { teacherID = 2, name = "Ms. James" }, 
        teacherID = 2 
       }, 
       new Course 
       { 
        courseName = "History", 
        teacher = new Teacher { teacherID = 3, name = "Ms. Davidson" }, 
        teacherID = 3 
       } 
      ); 
     } 

страница выглядит следующим образом. enter image description here

Но если я делаю это для контроллера:

public ActionResult Index() 
     { 
      var _coursesList = new List<Course>(); 
      _coursesList.Add(new Course { ID = 1, courseName = "English", teacherID = 1, teacher = new Teacher { teacherID = 1, name = "Mrs. Thomas" } }); 
      _coursesList.Add(new Course { ID = 2, courseName = "History", teacherID = 2, teacher = new Teacher { teacherID = 2, name = "Ms. Jones" } }); 
      _coursesList.Add(new Course { ID = 3, courseName = "Math", teacherID = 2, teacher = new Teacher { teacherID = 2, name = "Ms. Fisher" } }); 

      return View(_coursesList); 

      // return View(db.Courses.ToList()); 
     } 

я получаю это:

enter image description here

+0

Вы уверены, что model.Teacher.Name имеет значение? Вы можете проверить контроллер, прежде чем возвращать представление во время отладки. – itsme86

+0

Я тестирую его с локальной базой данных, для которой я засеял данные. Несмотря на то, что он показывает значение в базе данных, по какой-то причине он, похоже, не проходит. – Amanda

ответ

0

Я не уверен, что идентификатор Я понимаю ваш вопрос, но я думаю, что вы можете создать свойство только для чтения:

public class Course 
{ 
    public int CourseID { get; set; } 
    public String Name { get; set; } 
    public Teacher Teacher { get; set; } 
    public String TeacherName 
    { 
     get { 
      return Teacher?.Name ?? Name 
     } 
    } 
} 

<table class="table"> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.Name) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.TeacherName) 
     </th> 
    </tr> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Name) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Teacher.Name) 
     </td> 
    </tr> 
} 
1

Убедитесь, что вы заполнить объект Model

Ex:

public ActionResult Index() 
    { 
     var _courselst = new List<Course>(); 
     _courselst.Add(new Course { CourseID = 1, Name = "IT", Teacher = new Teacher { Name = "Scot", TeacherID = 1 } }); 
     _courselst.Add(new Course { CourseID = 2, Name = "ACC", Teacher = new Teacher { Name = "Manj", TeacherID = 2 } }); 
     _courselst.Add(new Course { CourseID = 3, Name = "MATHS", Teacher = new Teacher { Name = "Demion", TeacherID = 3 } }); 

     return View(_courselst); 
    } 
+0

Спасибо, это позволило мне проверить, работает ли остальная часть моего кода. Он работает, когда я жестко кодирую его так, поэтому должна быть проблема с тем, как я засеял данные. Я пробовал более двадцати разных способов сделать это, и вчера провел весь день, но я не могу понять, почему данные не проходят. – Amanda

+0

, если вы можете опубликовать остальную часть кода сшивателя модели, я могу проверить его –

+0

Я достаточно опубликовал? – Amanda

Смежные вопросы