【问题标题】:Am I Seeding the Data Correctly or Doing Something Else Wrong?我是正确地播种数据还是做错了什么?
【发布时间】:2016-11-04 17:14:06
【问题描述】:

我正在尝试显示另一个对象中的对象的值。几天来我一直在重写它并用谷歌搜索它试图找出我哪里出错了。我从一个复杂得多的项目开始,但现在我编写了一个非常简单的学校项目,用作示例并尝试不同的事情。根据互联网上的示例,我已经用至少 30 种不同的方式重写了配置,但到目前为止没有任何效果。非常感谢任何帮助我摆脱困境的帮助!

类:

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; }
}

配置:

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
            }
       );
    }
}

查看:

@model IEnumerable<school.Models.Course>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.courseName)
        </th>
        <th>
        @Html.DisplayNameFor(model => model.teacher.name)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.courseName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.teacher.name)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
            @Html.ActionLink("Details", "Details", new { id=item.ID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.ID })
        </td>
    </tr>
}

</table>

如何让教师的姓名显示在课程视图中?

如果我在控制器中执行此操作,一切正常。

 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());
    }

所以问题一定是我播种数据的方式,对吧?

【问题讨论】:

    标签: c# html .net database configuration


    【解决方案1】:

    这些行:

    <td>
            @Html.DisplayFor(modelItem => item.courseName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.teacher.name)
        </td>
    

    在 lambda 中:

    DisplayFor(modelItem => item.teacher.name)
    

    看来你拿错东西了。

    虽然,根据您创建迭代的方式,您为什么不使用:

    @item.teacher.name
    

    代替:

    @Html.DisplayFor(modelItem => item.teacher.name)
    

    【讨论】:

    • 我想要通过从课程中获取信息来分配给课程的老师的姓名。除了课程的 item.teacher.name 之外,你还会怎么写?另外,当我在控制器中创建它们并以这种方式返回它们时,它们会正确显示,所以我认为问题不是 HTML。我不明白你回答的第二部分,你问我为什么不使用@item.teacher.name 而不是@Html.DisplayFor(modelItem => item.courseName),这是我正在尝试的两种不同的东西显示。
    • @Amanda 抱歉,已编辑。 lambda 本身正在寻找不同的东西。在modelItem =&gt; item.teacher.name 中,lambda 被强制转换并在 modelItem 上运行。 item 是在这种情况下正在操作的外部对象
    • 当我将其更改为 @item.teacher.name 时出现空引用异常
    猜你喜欢
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2012-04-15
    相关资源
    最近更新 更多