禁止在kendo grid mvc中执行读取操作

时间:2015-10-14 16:19:44

标签: asp.net-mvc asp.net-mvc-3 kendo-ui kendo-grid kendo-asp.net-mvc

如何在kendo grid mvc中禁止读取操作,这取决于发送到此网格的模型中的字段?

例如我发送false值而我不会调用read action

2 个答案:

答案 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");
        }
    })
)