2017-02-27 91 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()來訪問循環外部的列名稱。