我如何在kendo grid mvc中抑制取决于模型中的字段的读取动作?
例如,我发送了false值,但我没有调用读取动作。
正如JamieD77所提到的,其中一种方法是使用Grid(而不是DataSource)的AutoBind选项。
@(Html.Kendo().Grid<OrderViewModel>()
.Name("grid")
.AutoBind(Model.ShouldLoad)
但是使用上述方法有一些缺点--例如,如果Grid的 "Sortable "选项被启用,而用户试图对空的Grid进行排序,它将导致 "Read "请求(Grid将试图从服务器上获取数据)。这就是为什么我建议有条件地隐藏整个Grid,或者有条件地移除DataSource的 "Read "选项,并使用它的 "BindTo "选项将Grid绑定到空数组。
我还需要根据模型中的一个值,有条件地抑制网格的读取操作(在这种情况下没有理由对服务器进行调用)。感谢 @Vladimir lliev 的回答,他提到不要使用 AutoBind,而是从 DataSource 中删除 "Read "操作,并绑定到一个空数组。
这为我指明了正确的方向,但我不知道如何使用剃刀语法来实现。我想明白了,所以我分享给其他需要这个的人。
@(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");
}
})
)