显示空列表的模板

时间:2017-02-10 07:50:29

标签: c# asp.net razor display-templates

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

<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 个答案:

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

你不需要循环因为Razor模板迭代收集你。

答案 1 :(得分: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>`

答案 2 :(得分:1)

一个简单的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>