我有一个模型,它为可变数量的用户返回一个 IEnumerable 的足球选秀权。因此,我正在动态构建一个包含可变列数的 html 表。基本上,我的选择会像这样回来。但是,每个用户都会重复每个游戏,所以我只添加每个表行的前 3 列一次,然后只添加一个标签,直到 gameID 更改。我知道可能有更好的方法可以做到这一点,但这只是我需要快速完成的一个副项目。而且,我只是想弄清楚为什么它不起作用。
GameID
GameDateTimeDisplay
GameTeamDisplay
WinningTeamDisplay
PickedTeamAbbr
好的,所以这是行不通的精神错乱。我可以成功创建表头,但是 tbody 不工作,但它在一个奇怪的地方出错。
我不得不把所有的@Html.Raw(...) 东西放在那里,因为它很难找到 foreach 的结束标签和没有它们的 if 语句。
无论如何,这是我的代码。导致异常的行是这样的: @gameID = @pick.Game.GameID;
异常(exception)是 --> 编译器错误消息:CS1525: Invalid expression term '=' 智能感知将@gameID 显示为变量,@pick.Game.GameID 似乎也是正确的。
<table>
<thead>
<tr>
<th>Game</th>
<th>Game Date/Time</th>
<th>Winner</th>
@foreach(var name in @Model.UserNames) {
<th>@name</th>
}
</tr>
</thead>
<tbody>
@{
int lastGameID = 0;
int gameID = 0;
bool firstGame = true;
}
@foreach(var pick in @Model.Picks) {
@gameID = @pick.Game.GameID;
if(@gameID != @lastGameID) {
if(!@firstGame){
<text>@Html.Raw("</tr>")</text>
}
@Html.Raw(
<tr>
<td>@pick.GameTeamDisplay</td>
<td>@pick.GameDateTimeDisplay</td>
<td>@pick.Game.WinningTeam.TeamAbbr</td>
<td>@pick.PickedTeamAbbr</td>
)
}
else {
@Html.Raw(<td>@pick.PickedTeamAbbr</td>)
}
}
@Html.Raw(</tr>)
</tbody>
</table>
更新: 我已经删除了@Html.Raw 等...还将游戏ID 分配包装在@{} 中。它现在在这条线上给了我一个错误, @{gameID = @pick.Game.GameID;}
编译错误:CS1501:方法 'Write' 没有重载需要 0 个参数
这是更新后的代码:
@foreach(var pick in @Model.Picks) {
@{gameID = @pick.Game.GameID;}
if(@gameID != @lastGameID) {
if(!@firstGame){
@:</tr>
}
@:<tr>
<td>@pick.GameTeamDisplay</td>
<td>@pick.GameDateTimeDisplay</td>
<td>@pick.Game.WinningTeam.TeamAbbr</td>
<td>@pick.PickedTeamAbbr</td>
}
else {
<td>@pick.PickedTeamAbbr</td>
}
}
</tr>
最佳答案
您需要用 {
}
将其包围以使其成为代码块
@{gameID = pick.Game.GameID;}
此外,您不需要 foreach
/if
语句中的 @
,因为它们是代码块。
例如你可以写:
foreach(var name in Model.UserNames) {
关于asp.net-mvc-3 - MVC3 Razor foreach 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7198342/