MVC3 - две модели в одном представлении - ошибка - как классифицировать - PullRequest
1 голос
/ 16 июня 2011

Я хотел бы использовать две модели в одном представлении. Для этого у меня есть следующие настройки. В одном файле .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> 

на странице просмотра .cshtml. и в моем коде представления есть этот код, который разбивается .. Я получаю ошибку, говорящую - "models.parentview не имеет определения Class1Attribute и не имеет метода расширения ..... и т.д .." Как я могу классифицировать утверждение ниже, чтобы он распознал атрибут.

@foreach (var item in Model)
  {

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

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


  }

спасибо за вашу помощь.

Ответы [ 4 ]

3 голосов
/ 16 июня 2011

Использование

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

В качестве альтернативы вы можете сделать что-то вроде

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

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

  }
2 голосов
/ 16 июня 2011

Ваши свойства называются Class1 и Class2 =>

@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)
1 голос
/ 16 июня 2011
@Html.DisplayFor(modelItem => item.Class1.Class1Attribute)

У вас есть несколько ParentView в вашей модели? Если нет, то вы можете просто иметь

@model Project.Models.ParentView

Затем укажите ваши атрибуты класса как

@Html.DisplayFor(modelItem => Model.Class1.Class1Attribute)
@Html.DisplayFor(modelItem => Model.Class2.Class2Attribute) 
1 голос
/ 16 июня 2011

Я думаю, что ваш цикл должен быть следующим

@foreach (var item in Model)
{

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

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

Я предполагаю, Class1Attribute является собственностью Class1 класса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...