Kendo ui 如果一个视图中有多个网格(剑道网格MVC),则表单会回发多次

Kendo ui 如果一个视图中有多个网格(剑道网格MVC),则表单会回发多次,kendo-ui,kendo-grid,kendo-asp.net-mvc,Kendo Ui,Kendo Grid,Kendo Asp.net Mvc,我在视图中有3个剑道网格和一个保存按钮。当我点击Save按钮时,我会在控制器的action方法中得到更新的ViewModel,该方法会依次在数据库中添加/更新记录。但是save action方法被调用了3次,因为视图上有3个剑道网格。我从视图中删除了两个网格,它只回发了一次,因为视图只有一个网格(奇怪) 单击“保存”按钮时如何停止多次回发 Index.cshtml @using (Html.BeginForm("Save", "UDFController", FormMethod.Post))

我在视图中有3个剑道网格和一个保存按钮。当我点击Save按钮时,我会在控制器的action方法中得到更新的ViewModel,该方法会依次在数据库中添加/更新记录。但是save action方法被调用了3次,因为视图上有3个剑道网格。我从视图中删除了两个网格,它只回发了一次,因为视图只有一个网格(奇怪)

单击“保存”按钮时如何停止多次回发

Index.cshtml

@using (Html.BeginForm("Save", "UDFController", FormMethod.Post))
{

<input class="button" type="submit" name="save" value="Save"/>


@(Html.Kendo().Grid(Model.List1)
                     .Name("List1")
                     .HtmlAttributes(new { style = "width:auto;height:100%" })
                     .ToolBar(toolbar => toolbar.Create().Text("Add New Record"))
                     .Editable(editable => editable.Mode(GridEditMode.InCell).CreateAt(GridInsertRowPosition.Top))
                     .Columns(columns =>
                         {
                             columns.Bound(p => p.Title)
                                     .ClientTemplate("#= Title #" +
                                        "<input type='hidden' name='DateFields[#= index(data)#].Title' value='#= Title #' />")
                                     .Title("Title").HtmlAttributes(new { style = "width:30%" });
                             columns.Bound(p => p.MaxPrecision).Title("Decimal Places")
                                     .ClientTemplate("#= MaxPrecision #" +
                                            "<input type='hidden' name='DateFields[#= index(data)#].MaxPrecision' value='#= MaxPrecision #' />");                                 
                             columns.Bound(p => p.IsObsolete).Title("Obsolete")
                                 .ClientTemplate("#= IsObsolete #" +
                                            "<input type='hidden' name='DateFields[#= index(data)#].IsObsolete' value='#= IsObsolete #' />");
                         })
                    .DataSource(datasource => datasource
                        .Ajax()
                        .Model(model =>
                                {
                                    {
                                        model.Id(p => p.Title);
                                        model.Field(p => p.Title).Editable(true);
                                        model.Field(p => p.MaxPrecision).Editable(true);
                                        model.Field(p => p.IsObsolete).Editable(true);                                    
                                    }
                                }
                            )

                        )

                    )



@(Html.Kendo().Grid(Model.List2)
                     .Name("List2")
                     .HtmlAttributes(new { style = "width:auto;height:100%" })
                     .ToolBar(toolbar => toolbar.Create().Text("Add New Record"))
                     .Editable(editable => editable.Mode(GridEditMode.InCell).CreateAt(GridInsertRowPosition.Top))
                     .Columns(columns =>
                         {
                             columns.Bound(p => p.Title)
                                     .ClientTemplate("#= Title #" +
                                        "<input type='hidden' name='DateFields[#= index(data)#].Title' value='#= Title #' />")
                                     .Title("Title").HtmlAttributes(new { style = "width:30%" });
                             columns.Bound(p => p.MaxPrecision).Title("Decimal Places")
                                     .ClientTemplate("#= MaxPrecision #" +
                                            "<input type='hidden' name='DateFields[#= index(data)#].MaxPrecision' value='#= MaxPrecision #' />");                                 
                             columns.Bound(p => p.IsObsolete).Title("Obsolete")
                                 .ClientTemplate("#= IsObsolete #" +
                                            "<input type='hidden' name='DateFields[#= index(data)#].IsObsolete' value='#= IsObsolete #' />");
                         })
                    .DataSource(datasource => datasource
                        .Ajax()
                        .Model(model =>
                                {
                                    {
                                        model.Id(p => p.Title);
                                        model.Field(p => p.Title).Editable(true);
                                        model.Field(p => p.MaxPrecision).Editable(true);
                                        model.Field(p => p.IsObsolete).Editable(true);                                    
                                    }
                                }
                            )

                        )

                    )

@(Html.Kendo().Grid(Model.List3)
                     .Name("List3")
                     .HtmlAttributes(new { style = "width:auto;height:100%" })
                     .ToolBar(toolbar => toolbar.Create().Text("Add New Record"))
                     .Editable(editable => editable.Mode(GridEditMode.InCell).CreateAt(GridInsertRowPosition.Top))
                     .Columns(columns =>
                         {
                             columns.Bound(p => p.Title)
                                     .ClientTemplate("#= Title #" +
                                        "<input type='hidden' name='DateFields[#= index(data)#].Title' value='#= Title #' />")
                                     .Title("Title").HtmlAttributes(new { style = "width:30%" });
                             columns.Bound(p => p.MaxPrecision).Title("Decimal Places")
                                     .ClientTemplate("#= MaxPrecision #" +
                                            "<input type='hidden' name='DateFields[#= index(data)#].MaxPrecision' value='#= MaxPrecision #' />");                                 
                             columns.Bound(p => p.IsObsolete).Title("Obsolete")
                                 .ClientTemplate("#= IsObsolete #" +
                                            "<input type='hidden' name='DateFields[#= index(data)#].IsObsolete' value='#= IsObsolete #' />");
                         })
                    .DataSource(datasource => datasource
                        .Ajax()
                        .Model(model =>
                                {
                                    {
                                        model.Id(p => p.Title);
                                        model.Field(p => p.Title).Editable(true);
                                        model.Field(p => p.MaxPrecision).Editable(true);
                                        model.Field(p => p.IsObsolete).Editable(true);                                    
                                    }
                                }
                            )

                        )

                    )

}

我认为这是意料之中的,因为您有3个支持ajax的网格。由于它们被设置为ajax网格,因此它们应该彼此独立运行。

我认为如果在html帮助程序中将null传递给剑道网格的数据源,网格将以
远程数据模式
而不是
本地数据模式
构建,由于未设置读取Url,因此当前浏览器Url将用于读取操作

修复非常简单,只需确保在将其用作数据源之前初始化模型中的列表

像这样:

Html.Kendo().Grid(Model.List1) 
Model.List1 needs to be initialized.

谢谢你的回复,但我不确定我是否正确理解了你的答案。你有什么建议?如果我删除.Ajax(),它不会向后摆3次姿势吗?我认为它不会像您希望的那样工作。对于单独的请求,您有什么问题?您的网格是否都显示相同的数据?如果看到Save()操作,您会注意到有一个数据库保存调用(viewModel.Save(viewModel);)。如果存在单独的请求,则每次数据库调用都将执行我不希望执行的操作。如果看到Save()操作,您将注意到有一个数据库保存调用(viewModel.Save(viewModel);)。如果有单独的请求,那么每次数据库调用都会执行,这是我不想要的。并非所有网格都显示相同的数据。每个网格都绑定到IenumerableList模型的不同属性。您可以在网格ajax调用中保存到会话,然后在一个工作单元中保存对数据库的所有编辑(如果愿意)。您确定单独的数据库调用有那么多问题吗?这可能是一个大麻烦。既然你们的网格有相似的数据,你们能不能把它们结合起来,在一个新的列上进行过滤,以便区分?您可能有一个隐藏列,存储它所属的列表,并在用户单击链接、选项卡或其他内容时根据该值过滤可编辑网格。
Html.Kendo().Grid(Model.List1) 
Model.List1 needs to be initialized.