Как скрыть столбцы в WebGrid? - PullRequest
6 голосов
/ 12 мая 2011

Я новичок в 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 (), может быть?

1 Ответ

5 голосов
/ 24 августа 2011

Если бы сначала составить список столбцов в первом блоке кода в переменную (столбцы):

@{
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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...