1
votes

L'opérateur conditionnel ne montre pas si .Count == 0

Dans ma vue MVC, je souhaite utiliser un opérateur conditionnel pour afficher le nombre d'une variable même si elle est égale à 0 .

@foreach (var item in Model.TotalNumberProxy.LstFByTAndB)
{
    <tr>
        @using (var db = new ConnectionStringName())
        {
            <td>@db.code_VType.Find(item.Key).VType</td>
        }
        @for (var i = 1; i <= 12; i++)
        {
            <td>
                @(item.Count(x => x.tblFAM.CDate.Month == i) == 0 ? 0 : item.Count(x => x.tblFAM.CDate.Month == i))
            </td>
        }
        <td>@item.Count()</td>
    </tr>
}

Dans mon pour la boucle , j'utilise l'opérateur conditionnel, mais je ne peux pas afficher 0 même si le nombre est 0 qui est mon instruction conditionnelle. Comment puis-je le faire afficher?


6 commentaires

Cela semble être une énorme logique qui pourrait être encapsulée dans le contrôleur ou le modèle. La création de nouveaux modèles et autres devrait être extrêmement rare dans une vue MVC.


Pourquoi voudrais-tu? Si vous le comptez et qu'il vaut 0, vous imprimez explicitement 0 sinon comptez? mmm ...


Ne voyez-vous pas 0 dans l'interface utilisateur pour le moment?


@Grizzly que diriez-vous de la chaîne de retour, je veux dire "0" et Count (....). ToString ()


Je ne comprends pas pourquoi vous avez besoin de la condition, car le vrai chemin renvoie le résultat et le faux chemin renvoie le résultat après l'avoir calculé à nouveau.


@Grizzly que voyez-vous dans l'interface utilisateur lorsque le nombre est de 0?


3 Réponses :


0
votes

que diriez-vous de retourner string , je veux dire

@(item.Count(x => x.tblFAM.CDate.Month == i).ToString())


1 commentaires

Pourquoi compter deux fois la même condition, effectuer une conversion manuelle une fois et utiliser ToString () pour l'autre? Pourquoi y a-t-il besoin d'un opérateur ternaire ici?



2
votes

IMO Il serait beaucoup plus facile d'encapsuler une grande partie de cela dans le contrôleur / modèle:

    <tr>
        <td>@item.VType</td>
        @for (var i = 1; i <= 12; i++)
        {
            <td>@item.Columns[i]</td>
        }
        <td>@item.Count()</td>
    </tr>

Le code de la vue ressemblerait alors à:

@Html.DisplayFor(m => m.TotalNumberProxy.LstFByTAndB)


0 commentaires

3
votes

Pourquoi ne pas simplement renvoyer le résultat?

@item.Count(x => x.tblFAM.CDate.Month == i)


1 commentaires

Vous n'avez même pas besoin de .ToString () car ASP.NET MVC l'appelle automatiquement lors de la sortie en HTML (voir l'appel ultérieur à @ item.Count () ) ...