【问题标题】:Is it possible to hide/show Kendo grid column based on user role?是否可以根据用户角色隐藏/显示剑道网格​​列?
【发布时间】:2015-01-26 06:24:06
【问题描述】:

我在 asp.net MVC 中使用 Kendo ui 网格。是否可以根据用户角色隐藏/显示网格列?谢谢

【问题讨论】:

    标签: asp.net asp.net-mvc kendo-ui kendo-grid


    【解决方案1】:

    最简单的方法是:

    @(Html.Kendo().Grid(Model)
        .Name("Grid")
        .Columns(columns =>
        {
            columns.Bound(p => p.Id);
            columns.Bound(p => p.Name);
            if(User.IsInRole("Admin")) {
                columns.Bound(p => p.AdminOnlyInfo);
            }
        })
        ...
    )
    

    【讨论】:

    • .Coulmns() 方法是否接收Column 对象数组?如果是,您可以正常创建数组,并在最后将其作为参数传递
    • @j4ro 感谢回复。我使用的是js版本而不是mvc服务器版本。
    【解决方案2】:

    您可以使用hidden 指定列是否可见,因此一种选择可能是根据用户角色设置变量。比如在控制器中

    ViewBag.CanDisplay = true; // or omit if the user does not have permission
    

    在视图中

    var canDisplay = '@ViewBag.CanDisplay' | false;
    $("#grid").kendoGrid({
      columns: [
        { field: "firstProperty" },
        { field: "anotherProperty", hidden: !canDisplay }    
      ],
    

    【讨论】:

    • 感谢您的回复。使用 viewbag 隐藏列是否安全?
    • 与模型的任何其他属性一样安全,尽管恕我直言,使用视图模型(包括bool CanDisplay 属性)而不是ViewBag 总是更好的做法。
    • #StephenMuecke 感谢您的回复。你能解释一下如何使用视图模型来做到这一点。我在我的视图模型中添加了一个属性,但是如果我像这样添加 { field: "anotherProperty", hidden: !canDisplay } 它不起作用
    • 我仍然会将值分配给 javascript 变量,因为它使阅读和调试更容易 - var canDisplay = '@Model.CanDisplay' === 'True';
    猜你喜欢
    • 2014-08-05
    • 2013-11-24
    • 2014-11-14
    • 2016-06-12
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    相关资源
    最近更新 更多