Beaucoup de moteurs de modèles ont un type spécial de syntaxe une combinaison de dans Brindille par exemple, le à l'aide du moteur de visualisation de rasoir, le modèle aimerait comme ceci, impliquant une vérification supplémentaire sur le nombre d'éléments de la collection: P> foreach code> et
sinon code>. Fondamentalement, la clause
ele code> est exécutée lorsque la boucle
foreach code> n'a pas d'itérations. Cela peut être utile si vous souhaitez afficher une sorte de aucun élément de la liste em> de repli.
pour code> boucle peut ressembler à ceci p>
@foreach (var user in users) {
<li>@user.UserName</li>
}
@if (!users.Any()) {
<li><em>no user found</em></li>
}
4 Réponses :
La seule façon dont je pouvais penser à atteindre quelque chose comme celui-ci est avec quelques extensions à Cela vous permet de chaîner 2 Appels les uns sur les autres comme démonstarté par cet exemple en direct: http://rexter.com/runcode?code=AEBQ75190 < / a> qui utilise le code suivant: p> Comment cela s'intégrerait avec un modèle de rasoir, je suis toujours incertain de ... Mais peut-être que cela vous donne quelque chose à aller sur. p> p> iEnumerable
Rien de construit en Afaik, mais vous pourriez probablement étendre ceci en fonction de vos besoins: p>
http://haacked.com/ Archive / 2011/04/14 / A-meilleur-rasoir-foreach-loop.aspx p>
Je pourrais être capable d'aider plus tard lorsque je n'utilise pas mon téléphone si vous n'avez toujours pas de réponse p>
Je pense que si vous combinez cela avec la réponse de Jamiec, vous aurez une solution!
Consolidation des réponses de Jamiec et de Martin Booth. J'ai créé la méthode d'extension suivante. Il faut un premier argument iéalable, puis deux délégués pour rendre le texte. Dans les vues de rasoir, nous pouvons transmettre les délégués modèles em> deux ces paramètres. En bref, cela signifie que vous pouvez donner des modèles. Voici donc la méthode d'extension et comment vous pouvez l'appeler: @(Model.Users
.Each(@<li>@item.Name</li>)
.Else(
@<li>
<b>No Users</b>
</li>
)
)
La virgule est proche invisible. : P
Je suis d'accord, mais il n'y a pas de vraie façon que nous puissions contourner cela, pouvons-nous? :)
Si vous utilisez un paramètre nommé pour la clause d'équipe, il est probablement encore plus lisible et vous pouvez le rendre facultatif
Je pense que vous pourriez tirer de helperresult code> ou à partir de
ihtmlstring code> et créez un
.else () code> méthode de la mesure similaire. Donc, vous écririez:
@ modèles.utilisateurs.ach (@
Mieux encore, renvoyez une classe personnalisée du pour chaque méthode d'extension qui implémente ihtmlstring, mais cela signifie que la méthode d'autre s'applique uniquement à cette classe personnalisée (c.-à-d. Pas d'iNeumable)
+1 - bonne réponse. Je savais qu'il y avait un moyen de construire sur ce que j'avais commencé, je ne connaissais pas les délégués modèles pour Razor.
Peut-être que cela n'était peut-être pas possible lorsque la question a été posée, mais je viens de réaliser cela comme celui-ci:
@if (Model.EmailAddress.Count() > 0) { foreach (var emailAddress in Model.EmailAddress) { <div>@emailAddress.EmailAddress</div> } } else { <span>No email addresses to display</span> }