问题是我需要在学校的视图中"调用"人名字段,但是视图学校中的模型是@model IList<Project.Presentation.Models.SchoolViewModel>
的,而字段人名在模型@model IList<Project.Presentation.Models.PersonViewModel>
中。所以,我想我必须在同一视图中使用两个模型,但我不知道该怎么做。我不知道我是否只能使用一行代码来"调用"我需要的字段,或者我是否必须在后面做一些事情。
下面是视图"学校"中的代码:
@model IList<Project.Presentation.Models.SchoolViewModel>
@{
ViewBag.Title = "Start view";
}@
{
<div class="row">
<div class="col-md-6 ">
<h2>
Details of the person @Html.DisplayFor(Project.Presentation.Models.PersonViewModel.PersonName)
</h2>
</div>
</div>
}
我正在尝试使用@Html.DisplayFor(Project.Presentation.Models.PersonViewModel.PersonName)
,但显然它不起作用。
您的视图模型将包含视图中所需的所有属性 - 因此PersonViewModel
应该是视图模型中的属性
您没有显示SchoolViewModel
和PersonViewModel
之间的关系
但从名字来看,我猜这是一种一对多的关系——即一个人SchoolViewModel
会有很多PersonViewModel
代表学校里的人
因此,基于该假设,您的SchoolViewModel
可能如下所示:
public class SchoolViewModel
{
// other property ..
public IList<Project.Presentation.Models.PersonViewModel> PersonList {get; set;}
}
那么在您看来,它将如下所示:
@model IList<Project.Presentation.Models.SchoolViewModel>
@// first loop school
@for(int i =0; i < Model.Count; i++)
{
<div class="row">
@// then loop all person in the school
@for(int j = 0; j < Model[i].PersonList.Count; j++)
{
<div class="col-md-6 ">
<h2>
Details of the person @Html.DisplayFor(modelItem => Model[i].PersonList[j].PersonName )
</h2>
</div>
}
</div>
}
所以关键是,把你所有需要的属性都放到你的视图模型中
创建一个视图模型并将这两个模型包含在其中
public class SchoolPersonViewModel
{
public IList<Project.Presentation.Models.PersonViewModel> PersonList {get; set;}
public IList<Project.Presentation.Models.SchoolViewModel> SchoolList {get; set;}
}
在视图中
<div class="row">
<div class="col-md-6 ">
<h2>
Details of the person
@Html.DisplayFor(model => model.PersonList)
</h2>
</div>
</div>
人员列表是列表,所以使用每个
同为学校列表