我有两个类 - Student.cs和Lecturer.cs放在模型下。现在,在我的剃刀视图中,我必须将两个类放在一起。
我知道有一种方法可以解决问题。但我不知道接下来该做什么。我该怎么办@foreach?
这是我在cshtml中的代码。
@model Tuple<MVCApp1.Models.Student, MVCApp1.Models.Lecturer>
@{
ViewBag.Title = "MainPage";
Layout = "~/Views/Shared/_Layout.cshtml";
}
我正在使用表格,下面是我的@foreach代码部分。
@foreach (var j in Model)
{
<tr>
<td">@j.FirstName
</td>
<td>@j.MiddleName
</td>
<td>@j.LastName
</td>
我需要有2个表,每个表具有不同的属性。 Student.cs和第二个表中的第一个表将是Lecturer.cs。 我知道@foreach有问题,但我在网上找不到任何解决方案。请帮忙。
答案 0 :(得分:0)
元组不会暴露迭代器。
public class Tuple<T1> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
你所追求的是ViewModel
。
public class ViewModel
{
public List<Student> Students { get; set; }
public List<Teacher> Teachers { get; set; }
}
public ActionResult Index()
{
ViewModel model = new ViewModel();
// retreive from database
model.Students = new List<Student>() { new Student()};
model.Teachers = new List<Teacher>() { new Teacher()};
return View(model);
}
然后你可以构建你的表
<table>
<tr>
<th>First</th>
<th>Middle</th>
<th>Last</th>
</tr>
@foreach (var student in Model.Students)
{
<tr>
<td>@student.First</td>
<td>@student.Middle</td>
<td>@student.Last</td>
</tr>
}
@foreach (var teacher in Model.Teachers)
{
<tr>
<td>@teacher.First</td>
<td>@teacher.Middle</td>
<td>@teacher.Last</td>
</tr>
}
</table>
一旦您对此感到满意,就可以探索每个层次结构的继承和实体框架TPH表。
你最终可能会遇到这样的事情:
public abstract class Person
{
public int Id { get; set; }
public string First { get; set; }
public string Middle { get; set; }
public string Last { get; set; }
}
public class Teacher : Person
{
public string Class { get; set; }
public DateTime HireDate { get; set; }
}
public class Student : Person
{
public int Grade { get; set; }
public DateTime EnrolledDate { get; set; }
}
public class ViewModel
{
public List<Student> StudentsOnly { get; set; }
public List<Person> StudentsAndTeachers { get; set; }
}
public ActionResult Index()
{
Context db = new Context();
ViewModel model = new ViewModel();
// You could collect just the students
model.StudentsOnly = db.People.OfType<Student>().ToList();
// Or all of them
model.StudentsAndTeachers = db.People.ToList();
return View(model);
}
如果您只需要显示他们的名字,那么您只需要遍历单个人员列表。
<table>
...
@foreach (var person in Model.StudentsAndTeachers)
{
<tr>
<td>@person.First</td>
<td>@person.Middle</td>
<td>@person.Last</td>
</tr>
}
</table>