Показать шаблон для пустого списка
У меня есть вид с моделью, эта модель содержит список предметов.
<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 просто зацикливается на нем.
Проблема в том, что когда список пуст, я хотел бы иметь строку-заполнитель, которая говорит: "Нет сообщений о состоянии".
Я ищу способ добавить этот заполнитель, предпочтительно используя уже существующее отображение для шаблона.
3 ответа
Решение
Ты пробовал реветь
<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>`
Простое Если бы сделать трюк:
<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>
Если вы используете шаблоны, вы можете сделать это проще:
<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>
Вам не нужен цикл, потому что шаблоны Razor повторяют коллекцию для вас.