显示空列表的模板
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>
我有一个模型视图,这个模型包含一个项目列表。
<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>