【问题标题】:How to implement attribute driven visibility of Kendo grid columns?如何实现剑道网格列的属性驱动可见性?
【发布时间】:2018-07-18 07:35:00
【问题描述】:

以下是我的 MVC 视图中的剑道网格 -

@(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 块,我将在其中验证当前用户角色,并基于它显示/隐藏列。但是一旦网格中有许多列,这势必会变得难以管理。

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

谁能建议我们如何实现这一目标?

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

对此的任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 为什么不只是像columns.Bound(p =&gt; p.EmployeeSalary).Title("Employee Salary").Visible(Model.IsManager) 这样的东西,除非它按行更改,在这种情况下您需要处理 DataBound 事件。
  • @SteveGreene 这也是我建议的答案,而且很可能是通过剑道网格为您提供的选项来解决这个问题的正确答案。我认为您应该将其发布为答案。
  • 嗨@SteveGreene,是的,请将此作为答案发布,以便我们对其进行标记。谢谢

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


【解决方案1】:

如果你有一个模型属性来决定你的可见性,可以使用 MVC 包装器的Visible property。比如:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 2013-07-06
相关资源
最近更新 更多