Скрытие значений столбцов для нескольких записей в сетке в зависимости от их типа роли: MVC3 - PullRequest
0 голосов
/ 30 апреля 2011

** Я пытаюсь создать вид с сеткой

Макет вида, который я использую: **

@model IEnumerable<VC.MC.ReportalWeb.UI.Users>
@using myspace
@{
    ViewBag.Title = "Users";
    var grid = new WebGrid(source: Model, canSort: true);    
}

<h2>Users</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>

@grid.GetHtml(columns: grid.Columns(
grid.Column("UserName"),
grid.Column("Email"),
grid.Column(
header: "",
style: "text-align-center",
format: (item) => new HtmlString(Html.ActionLink("Edit", "Edit", new { id = item.id ).ToString() + " | " +
Html.ActionLink("Details", "Details", new { id = item.id }).ToString() + " | " +
Html.ActionLink("Delete", "Delete", new { id = item.id }).ToString()))
)
)

@grid.GetHtml(columns: grid.Columns(Html.RoleBasedColumns(grid)))


@{
    if (!string.IsNullOrWhiteSpace(grid.SortColumn))
    {
<script type="text/javascript">
    $('thead > tr > th > a[href*="sort=@grid.SortColumn"]').parent().append('@(grid.SortDirection == SortDirection.Ascending ? "^" : "v")');
</script>
}
}

RoleBasedColumns (сетка):вспомогательный метод в моей бритве, который

public static WebGridColumn[] RoleBasedColumns(
        this HtmlHelper htmlHelper,
        WebGrid grid
    )
    {
        var user = htmlHelper.ViewContext.HttpContext.User;
        var columns = new List<WebGridColumn>();

        var query = from p in _adminModelContainer.Users
                    select p;


        IList<Users> userList = query.ToList();

        for (int i = 0; i < userList.Count; i++)
        {
            // The Prop1 column would be visible to all users
            columns.Add(grid.Column("UserName"));

            if (userList[i].RolesId == 1)
            {
                // The Prop2 column would be visible only to users
                // in the foo role
                columns.Add(grid.Column("Email"));
            }
        }
        return columns.ToArray();
    }

Я хочу показывать кнопки редактирования и удаления ссылок только для тех пользователей, чей RolesId равен 1.

Используя вышеупомянутую функциональность, сетка просто реплицирует себя. Показываются заголовки столбцов, для которых roleid равен 1.

Я в исправлении.

Любая помощь будет полезна.

Спасибо

1 Ответ

0 голосов
/ 30 апреля 2011

Сделайте это простым способом и используйте бесплатные элементы управления mvc от Telerik (сетка), и когда вы определяете свою сетку ... просто используйте динамический столбец вдоль линий:

@(Html.Telerik().Grid(Model)
      .Name("Grid").TableHtmlAttributes(new { width="800"})
        .Columns(columns =>
        {
            if (userIsInWhateverRole){
                columns.Template(o => Html.Action(GenerateYourLinkStuffHere));
            }
            columns.Bound(o => o.Address).Width(150);
            columns.Bound(o => o.City).Width(120);
            columns.Bound(o => o.State).Width(100);

 })
        .Sortable()
        .Scrollable()
        .Groupable()
        .Filterable()
        .Pageable(paging =>
            paging.PageSize(5)
                  .Style(GridPagerStyles.NextPreviousAndNumeric)
                  .Position(GridPagerPosition.Bottom)))


Никакой другой сеткиэто так же хорошо, на мой взгляд, и бесплатно.Зачем причинять себе головную боль:)

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