2017-02-27 129 views
0

之前使用单个IEnumerable值我有一个列出剧院的礼堂名称的视图。在For Each

@ModelType IEnumerable(Of dbtheatersinfo.TheaterAuditorium) 
<h2>Theater Auditoriums</h2> 
<table class="table"> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(Function(model) model.Theater.TheaterName) 
     </th> 
     <th> 
      @Html.DisplayNameFor(Function(model) model.TheaterAuditoriumName) 
     </th> 
    </tr> 

@For Each item In Model 
    @<tr> 
     <td> 
      @Html.DisplayFor(Function(modelItem) item.Theater.TheaterName) 
     </td> 
     <td> 
      @Html.DisplayFor(Function(modelItem) item.TheaterAuditoriumName) 
     </td> 
    </tr> 
Next 
</table> 

这里列出的所有放映厅具有相同的TheaterName,所以我想显示TheaterName的标记中的第一个实例(并从列表中删除)。我试过了:

<h2>Auditoriums for @Html.DisplayFor(Function(model) model.Theater.TheaterName) </h2> 

但是,这给了我,“'剧院'不是'IEnumerable(ofAcademicAuditorium)'的成员。”数据在那里;它显示在For Each循环中。我只是无法弄清楚如何在循环之前使用它。

+3

您可以随时获得集合中的第一个项目 - “@ Model.First()。Theater.TheaterName' –

+0

只要列表中至少有一个项目,就可以使用'First' 。如果可能没有项目,那么你需要使用'FirstOrDefault'并说明它可能是'Nothing'。您可以在VB 2015或更高版本中使用空传播,例如'model.FirstOrDefault?.Theater.TheaterName'。无论哪种方式,您应该在循环中使用'Model.Skip(1)',以便忽略第一项。 – jmcilhinney

回答

1

我问了一个错误的问题,但最终无论如何都需要答案。要正确地做到这一点来看,我需要一个视图模型:

Namespace ViewModels 
    Public Class AuditoriumIndex 
     Public Property TheaterAuditorium As IEnumerable(Of TheaterAuditorium) 
     Public Property Theater As Theater 
    End Class 
End Namespace 

在控制器:

Dim viewModel = New AuditoriumIndex() 
viewModel.TheaterAuditorium = db.TheaterAuditoriums.Where(Function(a) a.TheaterID = id).SortBy("TheaterAuditoriumName") 
viewModel.Theater = db.Theaters.Where(Function(a) a.TheaterID = id).SingleOrDefault() 
Return View(viewModel) 

和视图:

h2>Auditoriums for @Html.DisplayFor(Function(model) model.Theater.TheaterName)</h2> 

<table class="table"> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(Function(model) model.TheaterAuditorium.FirstOrDefault().TheaterAuditoriumName) 
     </th> 
    </tr> 

@For Each item In Model.TheaterAuditorium 
    @<tr> 
     <td> 
      @Html.DisplayFor(Function(modelItem) item.TheaterAuditoriumName) 
     </td> 
    </tr> 
Next 
</table> 

在这里,我不得不使用FirstOrDefault()来访问循环外部的列名称。