L'obtention de l'indice de valeur sur rasoir foreach
Je suis en évoluant d'un List<T>
dans un rasoir boucle foreach, à mon avis, ce qui rend une partielle. Dans le partiel je suis rendu une seule pour laquelle je veux avoir 4 dans une rangée, à mon avis. J'ai une classe css pour la fin de deux colonnes ainsi le besoin de déterminer à l'partielle si l'appel est la 1ère ou de la 4ème record. Quel est le meilleur moyen de l'identification de cette dans mon partiel de la sortie du code correct?
C'est ma principale de la page qui contient la boucle:
@foreach (var myItem in Model.Members){
//if i = 1
<div class="grid_20">
<!-- Start Row -->
//is there someway to get in for i = 1 to 4 and pass to partial?
@Html.Partial("nameOfPartial", Model)
//if i = 4 then output below and reset i to 1
<div class="clear"></div>
<!-- End Row -->
</div>
}
Je me dis que je peut créer un int que je puisse mettre à jour à chaque passage, et de rendre le texte pas de problème ici, mais c'est en passant la valeur de l'entier dans mes partiels, je suis de plus en plus inquiète. Sauf si il ya une meilleure façon.
Voici mon partiel:
@{
switch()
case 1:
<text>
<div class="grid_4 alpha">
</text>
break;
case 4:
<text>
<div class="grid_4 omega">
</text>
break;
default:
<text>
<div class="grid_4">
</text>
break;
}
<img src="Content/960-grid/spacer.gif" style="width:130px; height:160px; background-color:#fff; border:10px solid #d3d3d3;" />
<p><a href="member-card.html">@Model.Name</a><br/>
@Model.Job<br/>
@Model.Location</p>
</div>
Ne sais pas si je vais avoir une blonde journée d'aujourd'hui, et c'est terriblement facile, mais je ne peux pas penser à la meilleure façon de passer l'int valeur. J'espère que quelqu'un peut vous aider.
- Si seulement il existait un moyen en c# pour faire une boucle avec un indice... oh wait! Il y en a! msdn.microsoft.com/en-us/library/ch45axte.aspx 🙂
- La création de l'index n'est pas la question. En passant l'index dans le partiel est la question.
Vous devez vous connecter pour publier un commentaire.
//Utilisation de @{i++ incrémente la valeur}
Plus d'infos sur mon blog
http://jimfrenette.com/2012/11/razor-foreach-loop-with-index/
Prendre un coup d'oeil à cette solution à l'aide de Linq. Son exemple est similaire en ce qu'il est nécessaire de balisage différent pour chaque 3ème point.
Ou vous pouvez simplement faire ceci:
Members
est unIEnumerable
.ToList()
" la méthode. Aussi, la question initiale était d'environ unList<T>
Est là une raison quelconque vous n'êtes pas en utilisant les sélecteurs CSS pour le style de la première et de la dernière éléments au lieu d'essayer de joindre une classe personnalisée pour eux? Au lieu de style basé sur alpha ou omega, utilisez d'abord l'enfant et dernier enfant.
http://www.quirksmode.org/css/firstchild.html
IndexOf semble être utile ici.
...
Toutes les réponses ci-dessus, nécessitent de logique dans la vue. Les points de vue devraient être muet et contenir aussi peu que possible la logique. Pourquoi ne pas créer des propriétés du modèle de vue qui correspondent à la position dans la liste par exemple:
Dans votre modèle de vue builder vous définissez la position 1 à 4.
MAIS .. il y a même une manière plus propre. Pourquoi ne pas faire la classe CSS d'une propriété de votre modèle de vue? Ainsi, au lieu de l'instruction switch dans votre partiel, vous faites juste cela:
Déplacer l'instruction switch pour votre modèle de vue du générateur et de remplir la classe CSS là.
Dans le cas où vous voulez compter les références de votre modèle( ie: le Client a comme Adresse de référence si vous voulez compter le nombre de l'adresse existe pour un client) dans une boucle foreach, à votre point de vue, tels que:
ne codé:
et de l'utiliser comme ceci:
ps: n'oubliez pas d'ajouter INCLURE cette référence à vous DbContext à l'intérieur, par exemple, votre action Index du contrôleur, dans le cas où c'est un IEnumerable modèle.
Très Simple: