【问题标题】:How to hide Columns in WebGrid?如何隐藏 WebGrid 中的列?
【发布时间】:2011-08-24 06:47:29
【问题描述】:

我是 MVC3 的新手 - 我正在使用 WebGrid 在网站上显示一些列,用于我正在进行的拍卖。这将显示一个显示最新出价的网格。当管理员以外的任何人登录时,他们应该只看到投标金额和日期/时间。当管理员登录时,他们应该会看到所有列(姓名和联系信息)。我想我可能不得不以某种方式在代码中按摩这个,但我想知道是否有办法在 Razor 标记中处理它?这是我现在拥有的:

            @{ var grid = new WebGrid(Model.Bids.OrderByDescending(b => b.BidAmount)); }
        @grid.GetHtml(
        tableStyle: "grid",
        headerStyle: "head",
        alternatingRowStyle: "alt",
        columns: grid.Columns(
            grid.Column("BidAmount", format: @<text>$@item.BidAmount</text>),
            grid.Column("BidDateTime"),
            grid.Column("FirstName"),
            grid.Column("LastName"),
            grid.Column("Email"),
            grid.Column("PhoneNumber")
            )
        )

所以我想用伪代码做的是这样的:

                @{ var grid = new WebGrid(Model.Bids.OrderByDescending(b => b.BidAmount)); }
            @grid.GetHtml(
            tableStyle: "grid",
            headerStyle: "head",
            alternatingRowStyle: "alt",
            columns: grid.Columns(
                grid.Column("BidAmount", format: @<text>$@item.BidAmount</text>),
                grid.Column("BidDateTime"),
@if(userIsAdmin){
                grid.Column("FirstName"),
                grid.Column("LastName"),
                grid.Column("Email"),
                grid.Column("PhoneNumber")
                )
         }    
     )

这可以吗?如果没有,关于如何处理它的任何想法?我是否需要编写两个不同的 WebGrid,并用 if() 包围它们?

【问题讨论】:

  • 您是否尝试过用条件检查包围单个列? (不确定这是否可能。)类似: if(isAdmin) { grid.Column(...) }
  • @Todd 你得到解决方案了吗?如果是的话,你能把它贴在这里吗?

标签: asp.net-mvc-3


【解决方案1】:

如果首先将第一个代码块中的列列表组合成一个变量(cols):

@{
var grid = ...;
IEnumerable<WebGridColumn> cols = grid.Columns(... the common columns ...);
if (isAdmin)
  cols = cols.Concat(grid.Columns(... the admin columns ...); 
}

并将其传递给 GetHtml() 方法:

@grid.GetHtml(...
            columns: cols);

我认为对于 Concat 方法,您需要像往常一样使用用于 System.Linq 的命名空间。或者,您可以使用 List&lt;WebGridColumns&gt; 并使用 AddRange。

关键是 GetHtml 需要一个 IEnumerable&lt;WebGridColumn&gt; 作为 columns 参数。 grid.Columns 辅助方法只不过是一个带有 params 数组参数的方法,因此您可以一个接一个地“列出”列,但实际上您是以这种方式组成一个 params 数组。但是,您可以使用 C# 中可以想象的任何有效方法来组成列列表 (IEnumerable),然后可以将其传递给 GetHtml。

【讨论】:

    猜你喜欢
    • 2017-07-06
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2013-11-28
    相关资源
    最近更新 更多