我有一个索引页面,显示来自数据库的分页数据列表。当该列表为空时,我想显示一个“空白平板”视图,清楚地向用户显示它们的位置以及它们可以在那里执行的操作:“您可以通过单击此处添加新项目”类型的事物。
除了在整个页面上放置一个大的if语句之外,还有更好/更清晰的方法吗?
<% if (Model.Items.Count > 0) { %>
normal view
<% }
else { %>
blank slate view
<% } %>
答案 0 :(得分:2)
本杰明安德森的好建议。另外,你们很多人想要研究MVCContrib Grid(参见.Empty方法)
http://www.jeremyskinner.co.uk/2009/02/22/rewriting-the-mvccontrib-grid-part-2-new-syntax/
<%= Html.Grid(Model.People).Columns(column => {
column.For(x => x.Id).Named("Person ID");
column.For(x => x.Name);
column.For(x => x.DateOfBirth).Format("{0:d}");
})
.Attributes(style => "width:100%")
.Empty("There are no people.")
.RowStart(row => "<tr foo='bar'>") %>
答案 1 :(得分:0)
除了重定向到控制器中的其他视图或使用不同的视图引擎外,这是最佳方式。
稍微更清洁的替代方法是使用部分视图进行网格和分页,但是在视图中间仍然有一个If子句。
答案 2 :(得分:0)
以下HtmlHelper如何viewName
是部分视图的名称。这不完全是你想要的,但可能提供一个开始。我要考虑的是假设您有一个可以在空列表中执行的操作的集合列表,您可以创建反映该列表的部分视图。也许每个控制器一个,但命名相同,可以取代“NoResultsView”参数。
取决于您是否在项目中使用ViewModel - 您可以为结果类型视图创建命名约定,这可以进一步消除对viewName
参数的需求
public static MvcHtmlString ResultsView<TModel> (this HtmlHelper helper, IList<TModel> items, string viewName) where TMdodel: class
{
if (items.Count() != 0)
{
return System.Web.Mvc.PartialExtensions.Partial(helper, viewName, items);
}
}
return return System.Web.Mvc.PartialExtensions.Partial(helper, "NoResultsView", items); // View is Shared
}