MVC3 - 一个视图中的两个模型 - 错误 - 如何分类

时间:2011-06-16 15:07:00

标签: asp.net-mvc model-view-controller class asp.net-mvc-3 models

我想在一个视图中使用两个模型。为此,我有以下设置。 在单个.cs文件中,我有以下型号代码:

public class Class1   
{
   //List of atttributes 1.
}

public class Class2   
{
   //List of atttributes 2.
}


 public class ParentView
{
   public Class1 Class1{get; set;}
   public Class2 Class2{get; set;}

}

要在一个视图中使用这两个类,我引用

@model IEnumerable<Project.Models.ParentView> 

在View .cshtml页面中。在我的视图代码中有这个代码正在分解..我得到一个错误说 - “models.parentview没有Class1Attribute的定义,也没有扩展方法.....等等。”我怎么能分类下面的语句,以便它识别属性。

@foreach (var item in Model)
  {

        @Html.DisplayFor(modelItem => item.Class1Attribute)

        @Html.DisplayFor(modelItem => item.Class1Atttribute)    


  }

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

使用

 @Html.DisplayFor(modelItem => modelItem.Class1.Class1Attribute)

或者你可以做类似

的事情
 @foreach (var item in Model.Class1)
 {
    @Html.DisplayFor(modelItem => item.Class1Attribute1)

    @Html.DisplayFor(modelItem => item.Class1Attribute2)    

  }

答案 1 :(得分:2)

您的属性称为Class1Class2 =&gt;

@Html.DisplayFor(x => x.Class1.Class1Attribute)
@Html.DisplayFor(x => x.Class2.Class2Attribute)  

甚至更好地使用显示模板而不是编写任何循环:

@Html.DisplayForModel()

然后在~/Views/Shared/DisplayTemplates/ParentView内:

@model ParentView
@Html.DisplayFor(x => x.Class1)
@Html.DisplayFor(x => x.Class2)

~/Views/Shared/DisplayTemplates/Class1.cshtml内部:

@model Class1
@Html.DisplayFor(x => x.Class1Attribute)

~/Views/Shared/DisplayTemplates/Class2.cshtml内部:

@model Class2
@Html.DisplayFor(x => x.Class2Attribute)

答案 2 :(得分:1)

我认为你的循环应该如下

@foreach (var item in Model)
{

    @Html.DisplayFor(modelItem => item.Class1.Class1Attribute)

    @Html.DisplayFor(modelItem => item.Class1.Class1Atttribute)    
}

我认为Class1AttributeClass1

中的属性

答案 3 :(得分:1)

@Html.DisplayFor(modelItem => item.Class1.Class1Attribute)

您的模型中有多个ParentView吗?如果没有,那么你可以

@model Project.Models.ParentView

然后将您的类属性引用为

@Html.DisplayFor(modelItem => Model.Class1.Class1Attribute)
@Html.DisplayFor(modelItem => Model.Class2.Class2Attribute)