有没有一种好的方法来创建呈现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'>") %> 
+0

的MVCContrib电网是质量! ! – s1mm0t 2010-06-29 17:55:44

如何以下的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 
}