13

我有一个 webgrid,并且有一列我希望只对某些用户可见。目前我已经将网格编码如下

if (Context.User.IsInRole(Role.Inputter) || Context.User.IsInRole(Role.Administrator))
{
    @grid.GetHtml(columns: grid.Columns(
        grid.Column(format: (item) => Html.ActionLink("Select", "Details", new { contractId = item.ContractId })),
        grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { contractId = item.ContractId })),
        grid.Column("SignOffDate", "Sign Off Date",
            format: @<text> <span>@item.SignOffDate.ToString("d/M/yyyy")</span></text>),
        grid.Column("FullContractNumber", "Contract Number"),
        grid.Column("ContractTitle", "Title")
    ));
}
else
{ 
    @grid.GetHtml(columns: grid.Columns(
        grid.Column(format: (item) => Html.ActionLink("Select", "Details", new { contractId = item.ContractId })),
        grid.Column("SignOffDate", "Sign Off Date",
            format: @<text> <span>@item.SignOffDate.ToString("d/M/yyyy")</span></text>),
        grid.Column("FullContractNumber", "Contract Number"),
        grid.Column("ContractTitle", "Title")
    ));
}

但是肯定有更好的方法而不重复所有代码吗?2 列输入之间的唯一区别是我想为特定用户显示编辑链接。那么最好的替代方法是什么?

4

3 回答 3

27

试试这样(未经测试,目前无权访问 VS):

@{
    var gridColumns = new List<WebGridColumn>();
    gridColumns.Add(grid.Column(format: (item) => Html.ActionLink("Select", "Details", new { contractId = item.ContractId })));
    if (Context.User.IsInRole(Role.Inputter) || Context.User.IsInRole(Role.Administrator))
    {
        gridColumns.Add(grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { contractId = item.ContractId })));
    }
    gridColumns.Add(grid.Column("SignOffDate", "Sign Off Date", format: @<text> <span>@item.SignOffDate.ToString("d/M/yyyy")</span></text>));
    gridColumns.Add(grid.Column("FullContractNumber", "Contract Number"));
    gridColumns.Add(grid.Column("ContractTitle", "Title"));
}

@grid.GetHtml(columns: grid.Columns(gridColumns.ToArray()));
于 2011-08-24T17:26:18.323 回答
0
grid.Column("FriendlyId", style:"hidecol",header:"")

而不是像这样使用它,你应该像下面这样使用它。我试过了,它会成功的。

grid.Column(format: @<input type="hidden" name="FriendlyId" value="@item.FriendlyId" />)
于 2014-01-08T09:02:48.853 回答
0

不确定是否可以通过使用“columnNames”参数使我变得更简单。我想显示“CustomerCode”列,所以只需将“CustomerCode”放在任何其他列都被排除在外。

WebGrid obj = new WebGrid(Custs,columnNames: new[] { "CustomerCode"});

取自

http://www.codeproject.com/Articles/843788/WebGrid-in-ASP-NET-MVC-important-tips#Tip3:-DisplayNecessaryColumnsMVCWebGrid

于 2014-11-20T13:11:22.917 回答