MVC3 Rasoir foreach problèmes
J'ai un modèle qui est de retour d'un IEnumerable de football de choix pour un nombre variable d'utilisateurs. Pour cette raison, je suis dynamiquement la construction d'un tableau html avec un nombre variable de colonnes. Fondamentalement, mon choix va revenir comme ça. Cependant, chaque match va être répétée pour chaque Utilisateur, donc, je suis seulement en ajoutant les 3 premières colonnes de chaque ligne de la table une fois, puis en ajoutant une seule balise jusqu'à ce que le gameID changements. Je sais qu'il y a probablement de meilleures façons de le faire, mais c'est juste un projet que j'ai besoin d'être fait rapidement. Et, je veux juste comprendre pourquoi ça ne fonctionne pas.
GameID
GameDateTimeDisplay
GameTeamDisplay
WinningTeamDisplay
PickedTeamAbbr
OK, donc ici c'est la folie qui ne fonctionne pas. Je peux obtenir mes en-têtes de tableau créé avec succès, mais alors la tbody ne fonctionne pas, mais c'est erroring dans un endroit bizarre.
J'ai dû mettre toutes les @Html.Raw(...) des trucs là parce qu'il avait de la difficulté à trouver les balises de fin pour le foreach et si les déclarations sans eux.
De toute façon, voici mon code. La ligne qui est à l'origine de l'exception est ceci:
@gameID = @choisir.Jeu.GameID;
L'exception est --> Message d'Erreur du Compilateur: CS1525: Invalid expression du terme '='
L'intellisense affiche @gameID comme une variable et l' @choisir.Jeu.GameID semble être correct.
<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>
Mise à JOUR:
J'ai supprimé l' @Html.Raw, etc... Également enveloppé le gameID affectation dans un @{}. Il est maintenant de me donner une erreur sur cette ligne,
@{gameID = @choisir.Jeu.GameID;}
Erreur de Compilation: CS1501: Pas de surcharge de la méthode "Écrire" 0 arguments
Voici le Code mis à jour:
@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>
OriginalL'auteur Jeff Reddy | 2011-08-25
Vous devez vous connecter pour publier un commentaire.
Vous devez l'entourer de
{
}
pour en faire un codeblockAussi, vous n'avez pas besoin de la
@
à l'intérieur de laforeach
/if
états parce qu'ils sont des blocs de code.par exemple, vous pouvez simplement écrire:
OriginalL'auteur jzm
Il suffit d'écrire
Vous n'avez pas besoin
@
à l'intérieur du bloc de code. Vous pouvez utiliser@:
au lieu de<text>, Html.Raw
Vous pouvez le voir ici La syntaxe Razor référence
OriginalL'auteur dohaivu
J'ai décidé que mon Rasoir afficher le code était tout simplement trop complexe. Le véritable problème est que j'ai essayé de forcer une vue à travailler avec un Modèle que j'avais créé pour un autre point de vue. J'ai fini par créer un peu plus de modèles spécifiquement pour ce point de vue. Le Code est beaucoup plus propre et le meilleur de tous, il fonctionne! Voici le code que j'ai fini avec.
OriginalL'auteur Jeff Reddy