2015-09-18 81 views
-1

我有一個應用程序的大學橄欖球fightsongs。我想顯示單個球隊的詳細信息,例如學校名稱,吉祥物,會議等等,但也可以在同一頁面上看到局部視圖,其中部分視圖通過球隊的戰鬥歌曲循環播放。我能夠通過使用IEnumerable來獲得這些數據,但我不認爲這是最佳實踐。查看部分視圖,也有IEnumerable

我希望我的代碼儘可能精簡,在我看來有30個Viewbags可能不是最好的方法。

我的代碼炸燬在@Html.Partial("_FightSongDetails")

以下是錯誤:

Additional information: The model item passed into the dictionary is of type 'SportSongs.Models.ViewModels.ConferenceTeamViewModel', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[SportSongs.Models.ViewModels.ConferenceTeamViewModel]'.

我相信這是說,我的主視圖需要有ConferenceTeamViewModel的IEnumerable但後來我怎麼拉數據不把整個頁面放在一個foreach循環中?

ConferenceTeamViewModel只是我的團隊,會議和fungong數據的viewmodel。

我現在的詳細操作是:

public ActionResult Details(int id = 0) 
     { 
      var team = _db.Teams.Find(id); 
      var conference = _db.Conferences.FirstOrDefault(x => x.ConferenceId == team.ConferenceId); 
      if (team == null) 
      { 
       return HttpNotFound(); 
      } 

      return View(new ConferenceTeamViewModel() 
      { 
       Teams = team, 
       Conference = conference 
      }); 
     } 

我的詳細信息視圖(我能夠在單一的模式數據來拉,只是沒有fightsongs):

@model SportSongs.Models.ViewModels.ConferenceTeamViewModel 
<div class="row"> 
    <div class="col-sm-12"> 
      @Model.Teams.School 
    </div> 
</div> 
<div class="row"> 
    <div class="col-sm-12"> 
      @Html.Partial("_FightSongDetails") 
    </div> 
</div> 

這裏是我的PartialView:

@model IEnumerable<SportSongs.Models.ViewModels.ConferenceTeamViewModel> 
<tbody id="fightsongPlaylist"> 
@foreach (var song in Model) 
{ 
    <tr> 
     <td>@song.Fightsong.songname</td> 
     <td><a href="@Url.Content(@song.Fightsong.songurl)" class="playbtn" onclick="myFunction()"><i data-songid="@Url.Content(@song.Fightsong.FightSongId.ToString())" class="fa fa-play"></i></a></td> 
    </tr> 
} 

+0

我很困惑 - 沒有一個隊有多個戰鬥歌曲?或者你想顯示一個團隊的細節,但是_other_團隊的戰鬥歌曲? –

+0

如果你的變量是正確命名的,例如:你有一個「團隊」屬性,似乎只能容納一個團隊。 –

+0

@DStanley是的,每個團隊可以有多首歌曲,但詳細信息頁面只會顯示一個團隊。所以這個觀點將會有一個團隊的名字,吉祥物,會議,但是會有X數量的戰鬥。謝謝 – coggicc

回答

0

聽起來好像你想在局部視圖中顯示該團隊的歌曲。如果是這種情況,請使部分視圖的模型類型爲歌曲的集合,而不是團隊)。

更改您的局部視圖

@model IEnumerable<FightSong> 
<tbody id="fightsongPlaylist"> 
@foreach (var song in Model) 
{ 
    <tr> 
     <td>@song.songname</td> 
     <td><a href="@Url.Content(@song.songurl)" class="playbtn" onclick="myFunction()"><i data-songid="@Url.Content(@song.FightSongId.ToString())" class="fa fa-play"></i></a></td> 
    </tr> 
} 

和收集傳遞給子視圖:

<div class="row"> 
    <div class="col-sm-12"> 
      @Html.Partial("_FightSongDetails",model.Teams.FightSongs) 
    </div> 
</div> 
+0

這個模型。在這個部分調用中不能使用Fongsongs。 – coggicc

+0

是的,您應該爲ConferenceTeamViewModel添加一個包含團隊所有戰鬥歌曲的屬性。在這個答案中,該屬性被稱爲Songs,而對象是FightSong。聽起來好像它只是歌曲,你可以有IEnum 。 –

+0

@coggicc試試'model.Teams.FightSongs'。我更新了我的答案。 –