Подтвердить что ты не робот

MVC 3 Webgrid - как вы скрываете столбцы, которые вы не хотите видеть?

У меня есть 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")
    ));
}

Но, конечно, есть лучший способ, не повторяя весь этот код? Единственное отличие между двумя входами столбца состоит в том, что я хочу отобразить ссылку "Редактировать" для пользователей-участников. Итак, каков наилучший альтернативный способ сделать это?

4b9b3361

Ответ 1

Попробуйте это (непроверенные, не имеют доступа к 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()));

Ответ 2

grid.Column("FriendlyId", style:"hidecol",header:"")

Вместо того, чтобы использовать его так, вы должны использовать его, как описано ниже. Я пробовал, он будет работать успешно.

grid.Column(format: @<input type="hidden" name="FriendlyId" value="@item.FriendlyId" />)

Ответ 3

Не уверен, может ли я сделать это проще, используя параметр "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