2017-02-10 3 views
0

J'ai une vue avec un modèle, ce modèle contient une liste d'articles.Affichage du template pour une liste vide

<div class="panel panel-default"> 
    <div class="panel-heading"> 
     <h3 class="panel-title">@Resources.StatusMessage</h3> 
    </div> 
    @for (int i = 0; i < Model.StatusMessages.Count; i++) 
    { 
     @Html.DisplayFor(m => m.StatusMessages[i]) 
    } 
    <div class="panel-footer"> 
     @Html.ActionLink(Resources.AddStatusMessage, "AddStatusMessage", new {Id = Model.Id}) 
    </div> 
</div> 

Cette liste est affichée en utilisant un modèle DisplayFor. Le modèle est basé sur l'élément de la liste et l'affichageFor boucle simplement dessus.

Le problème est que lorsque la liste est vide, je voudrais avoir une chaîne de caractères génériques qui dit "Aucun message d'état".

Je cherche un moyen d'ajouter cet espace de préférence en utilisant l'affichage déjà existant pour le modèle.

Répondre

1

Avez-vous essayé le soufflet

<div class="panel panel-default"> 
    <div class="panel-heading"> 
     <h3 class="panel-title">@Resources.StatusMessage</h3> 
    </div> 
    @if(!Model.StatusMessages.Any()){@Html.DisplayFor(m => "Your string message here")} 
    @for (int i = 0; i < Model.StatusMessages.Count; i++) 
    { 
     @Html.DisplayFor(m => m.StatusMessages[i]) 
    } 
    <div class="panel-footer"> 
     @Html.ActionLink(Resources.AddStatusMessage, "AddStatusMessage", new {Id = Model.Id}) 
    </div> 
</div>` 
+0

cela semble faire l'affaire. Bien que je suis toujours strugling pour trouver la frontière entre la logique qui est autorisée dans la vue et la logique qui devrait être strictement dans le contrôleur –

1

Si vous en utilisant des modèles, vous pouvez le faire simplier:

<div class="panel panel-default"> 
    <div class="panel-heading"> 
     <h3 class="panel-title">@Resources.StatusMessage</h3> 
    </div> 
    @if(Model.StatusMessages != null && Model.StatusMessages.Any()) 
    { 
     @Html.DisplayFor(m => m.StatusMessages) 
    } 
    else 
    { 
     <p>No status messages</p> 
    } 
    <div class="panel-footer"> 
     @Html.ActionLink(Resources.AddStatusMessage, "AddStatusMessage", new {Id = Model.Id}) 
    </div> 
</div> 

Vous n'avez pas besoin boucle becouse modèles de rasoir collection itérer pour vous.

+0

modèle contient une liste, dit-il. – Valkyrie

+0

@Valkyriee je sais. Ce dont je parle est que les modèles Razor fonctionnent avec des listes même si vous n'avez qu'un modèle pour un élément –

+0

cela ressemble à la meilleure option mais je devrais peut-être mentionné dans le message original que j'allais ajouter un eidt et supprimer le bouton aswel . Pour cela, j'ai besoin de l'ID et donc la boucle est toujours nécessaire –

1

Un simple Si ferait l'affaire:

<div class="panel panel-default"> 
    <div class="panel-heading"> 
     <h3 class="panel-title">@Resources.StatusMessage</h3> 
    </div> 
    @{ 
     if(Model.StatusMessages != null) 
     { 
     for (int i = 0; i < Model.StatusMessages.Count; i++) 
     { 
     @Html.DisplayFor(m => m.StatusMessages[i]) 
     } 
     } 
     else 
     { 
     @Html.Display("No Status") 
     } 
    } 

    <div class="panel-footer"> 
     @Html.ActionLink(Resources.AddStatusMessage, "AddStatusMessage", new {Id = Model.Id}) 
    </div> 
</div>