ASP.NET MVC - 在同一视图中使用两个模型

时间:2017-08-13 23:55:01

标签: asp.net-mvc displayfor

问题是我需要在School的视图中“调用”PersonName字段,但视图School中的模型是@model IList<Project.Presentation.Models.SchoolViewModel>,字段PersonName在模型@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),但显然它不起作用。

2 个答案:

答案 0 :(得分:1)

您的viewmodel将包含视图中所需的所有属性 - 因此PersonViewModel应该是viewmodel中的属性

您没有显示SchoolViewModelPersonViewModel

之间的关系

但是根据名字来判断,我猜它是一对多的关系 - 即一个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>
}

因此关键是,将所有需要的属性放入viewmodel

答案 1 :(得分:0)

创建一个视图模型并在其中包含这两个模型

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>

PersonList是List,所以使用foreach

与学校列表相同