如何在kendo grid mvc中禁止读取操作,这取决于发送到此网格的模型中的字段?
例如我发送false值而我不会调用read action
答案 0 :(得分:0)
正如JamieD77所提到的,其中一种方法是使用Grid的AutoBind选项(而不是DataSource):
@(Html.Kendo().Grid<OrderViewModel>()
.Name("grid")
.AutoBind(Model.ShouldLoad)
然而,使用上述方法有一些缺点 - 例如,如果启用了网格的“可排序”选项并且用户尝试对空网格进行排序,则会产生“读取”请求(网格将尝试获取来自服务器的数据)。这就是为什么我建议ot有条件地隐藏整个网格或者有条件地删除DataSource的“Read”选项并使用它的“BindTo”选项将Grid绑定到空数组。
答案 1 :(得分:0)
我还需要基于模型中的值有条件地抑制网格的读取操作(在这种情况下,没有理由调用服务器)。感谢@Vladimir lliev的回答,他在其中提到不使用AutoBind,而是从数据源中删除“读取”操作并绑定到空数组。
这为我指明了正确的方向,但是我不知道如何使用剃刀语法。我知道了,所以我与其他需要此服务的人共享。
@(Html.Kendo().Grid<SomeNamespace.Model>(
// If you need to optionally bind to an empty datasource in certain scenarios,
// use the grid's constructor. Also, conditionally enable the DataSource's "Read"
// action. Note: it's not enough to just conditionally enable the "Read" action,
// since the grid still makes a request for some reason, but when you use an empty
// array AND disable the "Read" action, no call is made to the server.
Model.ShouldGridRead ? null : new SomeNamespace.Model[] { }
)
.Name("MyGrid")
.Columns(cols =>
{
})
.DataSource(ds => ds
.Ajax()
.Batch(true)
.Model(model =>
{
})
.Read(a =>
{
if (Model.ShouldGridRead)
{
a.Action("Some_Action", "Some_Controller");
}
})
)