gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:15:15 25 4
gpt4 key购买 nike

我是 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() 包围它们?

最佳答案

如果首先将第一个代码块中的列列表组合成一个变量(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>对于列参数。 grid.Columns 辅助方法只不过是一个带有 params 数组参数的方法,因此您可以一个接一个地“列出”列,但实际上您是以这种方式组成一个 params 数组。但是,您可以使用 C# 中可以想象的任何有效方法来组成列列表 (IEnumerable),然后可以将其传递给 GetHtml。

关于asp.net-mvc-3 - 如何隐藏 WebGrid 中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5981844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com