2013-06-27 42 views
0

我有两个类 - Student.cs和Lecturer.cs放置在模型下。现在,在我的剃刀视图中,我必须将两个班级放在一起。视图中的两个模型(与foreach)

我知道有一个方法Tuple来解决这个问题。但我不知道下一步该怎么做。我应该怎样处理我的@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> 

我需要有两个表,每个表具有不同的属性。 Student.cs的第一个表格和第二个表格将是Lecturer.cs。 我知道@foreach存在问题,但我无法在网上找到任何解决方案。请帮忙。

回答

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> 

一旦你熟悉这一点,你可以探索每个层次结构的继承和Entity Framework 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> 
+0

您可以在项目下的'/ ViewModels/ViewModel.cs'中创建一个新文件夹,或者为该页面指定更具体的命名。因为它是一张表,所以''ListingViewModel.cs' –

+1

'new List (){new Student()};'在这里填充并像往常一样分配给ViewModel。 –

+0

非常感谢! :) – sniggy

相关问题