显示空列表的模板

Display for template for an empty list

我有一个模型视图,这个模型包含一个项目列表。

<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 只是循环它。

问题是当列表为空时我想要一个占位符字符串 "No status messages".

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

如果你使用模板,你可以做得更简单:

<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 模板会为您迭代集合。

你试过下面的方法吗

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

一个简单的 If 就可以解决问题:

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