2017-02-10 80 views
0

我有一个模型视图,此模型包含项目列表。为空列表显示模板

<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> 

此列表使用DisplayFor模板显示。该模板基于列表中的项目,而displayFor只是简单地遍历它。

问题是,当列表是空的,我想有一个占位符字符串,说“没有状态消息”。

我正在寻找一种方法来添加此占位符,最好使用已存在的模板显示。

回答

1

你试过波纹管

<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

这似乎是它会做的伎俩。尽管我还在努力寻找视图中允许的逻辑与严格在控制器中的逻辑之间的边界 –

1

如果你使用模板,你可以做到这一点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> 

becouse剃刀模板迭代集合你不需要循环。

+0

模型包含一个清单,他说。 – Valkyrie

+0

@Valkyriee我知道。我所说的是Razor模板与列表一起工作,即使你只有一个元素的模板 –

+0

这看起来像最好的选择,但我也许应该在原文中提到我要添加一个eidt并删除按钮aswel 。为此,我需要ID,所以循环仍然是必需的 –

1

简单。如果会做的伎俩:

<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>