2017-02-10 12 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. Шаблон основан на элементе в списке и дисплее. Для этого просто петли.

Проблема в том, что, когда список пуст, я хотел бы иметь строку-заполнитель, в которой говорится «Нет сообщений о статусе».

Я ищу способ добавления этого заполнителя, предпочтительно используя уже существующий дисплей для шаблона.

ответ

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

Если вы используете шаблоны вы можете сделать это проще:

<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 Razor шаблонов коллекции итерационной для вас.

+0

Модель содержит список говорит он. – Valkyrie

+0

@ Valkyriee я знаю. Я говорю о том, что шаблоны Razor работают со списками, даже если у вас есть только шаблон для одного элемента –

+0

, это выглядит как лучший вариант, но я, возможно, должен был упомянуть в оригинальной записи, что я собираюсь добавить кнопку eidt и delete aswel , Для этого мне нужен идентификатор и, следовательно, цикл по-прежнему требуется –

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> 

 Смежные вопросы

  • Нет связанных вопросов^_^