MVCContrib Grid在空时显示标题?

ras*_*asx 2 asp.net-mvc mvccontrib asp.net-mvc-2

MVCContrib Grid中优雅的Action语法为我们提供了Empty()方法.但是,默认行为MvcContrib.UI.Grid.GridRenderer<T>.RenderHeader()是在网格为空时隐藏表列标题.有没有一种方法可以在不存在不需要重大重构的数据时显示标题?

现在我听说默认隐藏标题并硬编码,但这对我来说并不酷.

顺便说一句,这是在引擎盖下发生的事情MvcContrib.UI.Grid.GridRenderer<T>:

protected virtual bool RenderHeader()
{
    //No items - do not render a header.
    if(! ShouldRenderHeader()) return false;

    RenderHeadStart();

    foreach(var column in VisibleColumns())
    {
        //Allow for custom header overrides.
        if(column.CustomHeaderRenderer != null)
        {
            column.CustomHeaderRenderer(new RenderingContext(Writer, Context, _engines));
        }
        else
        {
            RenderHeaderCellStart(column);
            RenderHeaderText(column);
            RenderHeaderCellEnd();
        }
    }

    RenderHeadEnd();

    return true;
}

protected virtual bool ShouldRenderHeader()
{
    return !IsDataSourceEmpty();
}

protected bool IsDataSourceEmpty()
{
    return DataSource == null || !DataSource.Any();
}
Run Code Online (Sandbox Code Playgroud)

Bra*_*bby 5

您可以覆盖该类的ShouldRenderHeader()方法HtmlTableGridRenderer.

public class AlwaysRenderHeaderRenderer<T>
    : HtmlTableGridRenderer<T> where T : class
{
    protected override bool ShouldRenderHeader()
    {
        return true;
    }
}

<%= Html.Grid(Model).RenderUsing(new AlwaysRenderHeaderRenderer<TypeOfModel>()) %>
Run Code Online (Sandbox Code Playgroud)

这种方法的副作用是当网格为空时,将呈现空的表体而不是消息.提供的任何文本都将Empty()被忽略.这对我来说不是问题,因为无论如何我用JavaScript操纵客户端的表,但要注意.