2016-11-03 204 views
2

我真的不知道正确的词语来问我需要什么,这意味着我没有真正从谷歌获得任何东西,所以我只是想创建一个简单的例子。如果你能回答我的问题,或者只是指向我需要搜索的方向,那会很棒。如何显示对象内某个对象字段的值?

说我有这些类:

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

我不知道ID我明白你的问题,但我认为你可以创建一个只读属性,如下所示:

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对象

例:

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

相关问题