在剑道网格mvc中禁止读取动作。

问题描述 投票:0回答:2

我如何在kendo grid mvc中抑制取决于模型中的字段的读取动作?

例如,我发送了false值,但我没有调用读取动作。

asp.net-mvc asp.net-mvc-3 kendo-ui kendo-grid kendo-asp.net-mvc
2个回答
0
投票

正如JamieD77所提到的,其中一种方法是使用Grid(而不是DataSource)的AutoBind选项。

@(Html.Kendo().Grid<OrderViewModel>()
   .Name("grid")
   .AutoBind(Model.ShouldLoad)

但是使用上述方法有一些缺点--例如,如果Grid的 "Sortable "选项被启用,而用户试图对空的Grid进行排序,它将导致 "Read "请求(Grid将试图从服务器上获取数据)。这就是为什么我建议有条件地隐藏整个Grid,或者有条件地移除DataSource的 "Read "选项,并使用它的 "BindTo "选项将Grid绑定到空数组。


0
投票

我还需要根据模型中的一个值,有条件地抑制网格的读取操作(在这种情况下没有理由对服务器进行调用)。感谢 @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");
        }
    })
)
© www.soinside.com 2019 - 2024. All rights reserved.