Показать шаблон для пустого списка

У меня есть вид с моделью, эта модель содержит список предметов.

<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 повторяют коллекцию для вас.

Другие вопросы по тегам