根据用户角色,是否可能隐藏/显示Kendo网格列?

6

我正在使用ASP.NET MVC中的Kendo UI网格。是否可以根据用户角色隐藏/显示网格列?谢谢。

2个回答

10

最简单的方法是:

@(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);
        }
    })
    ...
)

.Columns() 方法是否接收 Column 对象的数组?如果是,您可以正常创建数组,并在最后将其作为参数传递。 - Catalin
@j4ro 感谢回复。我使用的是JS版本,而不是MVC服务器版本。 - Ironman

4
您可以使用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来隐藏列是安全的吗? - Ironman
与模型的任何其他属性一样安全,但在我的观点中,最好的做法是使用视图模型(包括 bool CanDisplay 属性),而不是 ViewBag - user3559349
#StephenMuecke 感谢您的回复。您能否解释一下如何使用视图模型来实现这个功能呢?我在我的视图模型中添加了一个属性,但如果我像这样添加 { field: "anotherProperty", hidden: !canDisplay } 它就不起作用了。 - Ironman
1
我仍然会将值分配给Javascript变量,因为这样做可以使其更易于阅读和调试 - var canDisplay ='@Model.CanDisplay' === 'True'; - user3559349

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接