有没有一种很好的方法来为ASP.Net MVC中的页面创建渲染空白平板?

时间:2010-06-29 15:56:22

标签: asp.net-mvc-2 user-interface

我有一个索引页面,显示来自数据库的分页数据列表。当该列表为空时,我想显示一个“空白平板”视图,清楚地向用户显示它们的位置以及它们可以在那里执行的操作:“您可以通过单击此处添加新项目”类型的事物。

除了在整个页面上放置一个大的if语句之外,还有更好/更清晰的方法吗?

<% if (Model.Items.Count > 0) { %>
       normal view 
<% } 
   else { %> 
       blank slate view 
<% } %>

3 个答案:

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