加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 如何在WebGrid中隐藏列?

发布时间:2020-12-16 03:53:35 所属栏目:asp.Net 来源:网络整理
导读:我是MVC3的新手 – 我正在使用WebGrid在网站上显示我正在进行的拍卖的一些列.这会显示一个显示最新出价的网格.除管理员以外的任何人登录时,他们应该只看到出价金额和日期/时间.当管理员登录时,他们应该看到所有列(名称和联系信息).我想我可能不得不以某种方
我是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",columns: grid.Columns(
                grid.Column("BidAmount",@if(userIsAdmin){
                grid.Column("FirstName"),grid.Column("PhoneNumber")
                )
         }    
     )

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

解决方法

如果首先将第一个代码块中的列列表组成一个变量(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< WebGridColumns>并使用AddRange.

关键是GetHtml需要一个IEnumerable< WebGridColumn>对于columns参数. grid.Columns辅助方法只不过是一个带有params数组参数的方法,因此您可以一个接一个地“列出”这些列,但实际上这样就构成了一个params数组.但是,您可以使用C#中可以想象的任何有效方法来组成列的列表(IEnumerable),然后可以将其传递给GetHtml.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读