具有部分视图的视图也具有IEnumerable

时间:2015-09-18 14:03:07

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我有大学橄榄球战斗的申请。我想显示一个团队的详细信息,如学校名称,吉祥物,会议等......但也可以在同一页面上查看局部视图,其中部分视图循环播放团队的战斗歌曲。我能够通过使用IEnumerable为战斗歌曲和Viewbag获取数据,但我不相信这是最佳做法。

我希望我的代码尽可能精简,在我看来有30个Viewbag可能不是最好的方法。

我的代码在@Html.Partial("_FightSongDetails")

上爆炸

这是错误:

  

附加信息:传递到字典中的模型项是   类型'SportSongs.Models.ViewModels.ConferenceTeamViewModel',但是   这本词典需要一个类型的模型项   'System.Collections.Generic.IEnumerable`1 [SportSongs.Models.ViewModels.ConferenceTeamViewModel]'。

我相信这是说我的主视图需要有一个IEnumerable的ConferenceTeamViewModel但是如何在不将整个页面放在foreach循环中的情况下提取数据呢?

ConferenceTeamViewModel只是我的视图模型,包含团队,会议和战斗数据。

我目前的详细信息行动是:

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>
}

1 个答案:

答案 0 :(得分: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>