我想根据角色安全性禁用数据绑定列。
我目前能够隐藏它而不是禁用如下,但我不知道如何禁用它。请指教,谢谢
function OnDataBound_ProductGrid() {
if ("@ViewBag.Role" == 'Admin') {
var grid = $("#Product").data("kendoGrid");
grid.hideColumn(0);
}
}
@(Html.Kendo().Grid(Model)
.Name("Grid")
.Columns(columns =>
{
columns.Template(ClientTemplate("<input type='checkbox' class='checkbox'/> ");
columns.Bound(r => r.RouteName);
})
.Events(events =>ev.DataBouns("OnDataBound_ProductGrid"))
)
答案 0 :(得分:0)
您可以通过在数据源上将字段设置为editable: false
来完成此操作。
答案 1 :(得分:0)
我同意安东尼的意见:
以下属性必须设置为false:
model: {
fields: {
ProductID: {
//this field will not be editable (default value is true)
editable: false
}
}
}
在您的方案中,您应该可以执行以下操作:
function OnDataBound_ProductGrid() {
if ("@ViewBag.Role" == 'Admin') {
var grid = $("#Product").data("kendoGrid");
grid.datasource.fields.ProductId.editable = false;
}
}
围绕网格定义包装/使用管理员角色条件也可以完成这项工作:
if ("@ViewBag.Role" == 'Admin') {
InnitGrid(false);
}
else
{
InnitGrid(true);
}
function InnitGrid(isEditable) {
$("#grid").kendoGrid({
dataSource: {
model: {
fields: {
ProductID: {
editable: isEditable
// or just replace isEditable with ("@ViewBag.Role" == 'Admin')
}
}
}
}
});
}
答案 2 :(得分:0)
你可以使用一个返回true或false的函数,取决于你需要什么。
columns.Bound(r => r.RouteName).Editable("isNotEditable");
function isNotEditable() {
return false;
}