我创建了一个PersonList类,其中包含不同人群的列表。在我的控制器中,我将该类传递给视图。我的视图是强类型的,所以我引用该类。但是我的视图需要那些组的类型(Student,Retired,Politic),所以我可以在View中的条件语句中使用它们。我通过在PersonList类中为每个组添加一个对象解决了这个问题,但我觉得这不是最好的方法。请指导我更好的解决方案。
.cs文件
@model ConferenceAttendees.Models.PersonLists
<style>
h6 {
display: inline
}
th{
text-align:center;
}
</style>
<div>
<table style="width:100%" align="left">
<tr>
<th>Imie</th>
<th>Nazwisko</th>
<th>Wiek</th>
<th>Partia</th>
<th>Doswiadczenie</th>
<th>Kierunek</th>
<th>Rok</th>
</tr>
@foreach (dynamic item in Model.AllPeople)
{
<tr>
<th>@item.Name</th>
<th>@item.LastName</th>
<th>@item.Age</th>
@if (item.GetType() == Model.APolitic.GetType())
{
<th>@item.Party</th>
<th>@item.Experience</th>
<th>b.d</th>
<th>b.d</th>
}
@if (item.GetType() == Model.AStudent.GetType())
{
<th>b.d</th>
<th>b.d</th>
<th>@item.Major</th>
<th>@item.Year</th>
}
</tr>
}
</table>
</div>
cshtml文件:
fileA.c
答案 0 :(得分:0)
首先,您可以通过@using
指令在Razor视图中导入命名空间。您可以在Students
指令之前执行此操作。然后,您可以在视图中使用类型Politics
和item
。
其次,要检查null
是否属于具体类型,您可以使用as
运算符查看结果是否不是GetType()
。因此,您无需在实例上调用AStudent
。现在,您可以删除APolitic
,ARetired
和dynamic
个实例。
此外,您的代码还有两个附注:
foreach
。您不需要动态输入。相反,请使用Person
作为item
变量的类型。为此,AllPeople
必须是List<Person>
类型,而不是List<IPerson>
。实际上,您根本不需要IPerson
接口,因为您没有在那里定义任何内容。Students
,Politics
)。 Students
的一个实例只是一个学生,为什么不调用班级Student
? Politics
。总而言之,您的观点现在看起来像这样:
@using ConferenceAttendees.Models
@model ConferenceAttendees.Models.PersonLists
<style>
h6 {
display: inline
}
th{
text-align:center;
}
</style>
<div>
<table style="width:100%" align="left">
<tr>
<th>Imie</th>
<th>Nazwisko</th>
<th>Wiek</th>
<th>Partia</th>
<th>Doswiadczenie</th>
<th>Kierunek</th>
<th>Rok</th>
</tr>
@foreach (Person item in Model.AllPeople)
{
var student = item as Student;
var politician = item as Politician;
<tr>
<th>@item.Name</th>
<th>@item.LastName</th>
<th>@item.Age</th>
@if (politician != null)
{
<th>@politician.Party</th>
<th>@politician.Experience</th>
<th>b.d</th>
<th>b.d</th>
}
@if (student != null)
{
<th>b.d</th>
<th>b.d</th>
<th>@student.Major</th>
<th>@student.Year</th>
}
</tr>
}
</table>
</div>