如何实现Kendo网格列的属性驱动的可见性?

时间:2018-07-18 07:35:01

标签: c# .net asp.net-mvc kendo-grid kendo-asp.net-mvc

以下是我的MVC视图之一中的Kendo网格-

@(Html.Kendo().Grid<MyProject.ViewModels.EmployeeViewModel>()
.Name("EmployeeGrid")
.DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("AdminEmployeeSearchData", "Employee").Type(HttpVerbs.Post))
        .ServerOperation(true)
        )
.Columns(columns =>
{
    columns.Bound(p => p.EmployeeID).Title("ID")
    columns.Bound(p => p.EmployeeName).Title("Employee Name")
    columns.Bound(p => p.EmployeeSalary).Title("Employee Salary")
})
.AutoBind(false)
.Sortable()
.EnableCustomBinding(true)

在这里,“ EmployeeSalary”列应该对特定角色可见。 为了实现这一目标,一种简单的方法是在视图中使用IF ... ELSE块,在此我将验证当前用户角色,并基于该角色来显示/隐藏列。但是,一旦网格中有许多列,这势必变得难以管理。

我正在考虑通过视图模型的字段级别的Attribute来实现这一点。也就是说,EmployeeSalary字段将具有一些属性,例如“ IsAccessible”,并且逻辑将在属性级别上。并且根据结果,剑道网格应该显示/隐藏该列。

有人可以建议我们如何实现这一目标吗?

另外,如果有什么不清楚的地方,请告诉我。

在此方面的任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:2)

如果您具有确定可见性的模型属性,则可以使用MVC包装器的Visible property。例如:

columns.Bound(p => p.EmployeeSalary).Title("Employee Salary").Visible(Model.IsManager)