有没有一种好的方法来创建呈现ASP.Net MVC中的页面空白石板?
问题描述:
我有一个索引页面,显示数据库中的分页数据列表。当该列表为空时,我想显示一个“空白石板”视图,清楚地向用户指示他们在哪里以及他们可以在那里做什么:“您可以通过单击此处添加新项目”类型的东西。有没有一种好的方法来创建呈现ASP.Net MVC中的页面空白石板?
有没有更好的/更清洁的方式来做到这一点,而不仅仅是在整个页面上有一个大的if语句?
<% if (Model.Items.Count > 0) { %>
normal view
<% }
else { %>
blank slate view
<% } %>
答
除了在控制器中重定向到不同的视图或使用不同的视图引擎,这是最好的方法。
稍微干净一些的替代方法是对网格和分页使用局部视图,但在视图中间仍然有一个If子句。
答
本杰明·安德森的好建议。此外,你很多要考虑的MVCContrib网格(见.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'>") %>
答
如何以下的HtmlHelper其中viewName
是局部视图的名称。这不完全是你以后的事情,但可能会提供一个开始。我会考虑的是,假设您有一组可以在空列表中执行的操作列表,您可以创建反映该列表的部分视图。也许每个控制器都有一个名称相同的名称,并且可以替换“NoResultsView”参数。
根据,如果你使用的是在你的项目中的ViewModels - 您可以创建一个命名约定为结果类型的意见,这可能进一步消除需要对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
}
的MVCContrib电网是质量! ! – s1mm0t 2010-06-29 17:55:44