2017-02-10 77 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>