我有大学橄榄球战斗的申请。我想显示一个团队的详细信息,如学校名称,吉祥物,会议等......但也可以在同一页面上查看局部视图,其中部分视图循环播放团队的战斗歌曲。我能够通过使用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>
}
答案 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>