我在mvc c#kendo ui grid中遇到麻烦。我试图从kendo更新批量更新方法调用控制器操作我遇到问题我的mvc视图是这样的。它可以正常工作' read'但在更新(保存所有批次)时,它没有在控制器中命中:
@(Html.Kendo().Grid(Model.oldList)
.Name("grid")
.Columns(columns =>
{
columns.Bound(m => m.IsNewString).HeaderHtmlAttributes(new { style = "text-align:center;" }).Title("Data").Encoded(false).Width(80); ;
columns.Bound(m => m.Id).HeaderHtmlAttributes(new { style = "text-align:center;" }).Title("Code").Encoded(false).Width(80);
columns.Bound(m => m.Name).HeaderHtmlAttributes(new { style = "text-align:center;" }).Title("Business Name").Encoded(false).Width(80);
columns.Bound(m => m.Address.Address1).HeaderHtmlAttributes(new { style = "text-align:center;" }).Title("Address1").Encoded(false).Width(80);
columns.Bound(m => m.Address.Address2).HeaderHtmlAttributes(new { style = "text-align:center;" }).Title("Address2").Encoded(false).Width(80);
columns.Bound(m => m.Address.Country).HeaderHtmlAttributes(new { style = "text-align:center;" }).Title("Country").Encoded(false).Width(80);
columns.Command(commands =>
{
commands.Destroy();
}).Title("Commands").Width(200);
})
.ToolBar(toolbar =>
{
//toolbar.Create();
toolbar.Save();
})
.Editable(editable => editable.Mode(GridEditMode.InCell))
.DataSource(dataSource =>
dataSource.Ajax()
.Batch(true) // Enable batch updates
.Model(model =>
{
model.Id(m => m.Id);
model.Field(m => m.Id).Editable(false);
})
//.Create(create => create.Action("Products_Create", "Home"))
.Read(read => read.Action("LoadCompareList", "Home", new { clientId = clientid, templateId = templateid }))
.Update(update => update.Action("test", "Home"))
)
.Pageable()
)
我的控制器动作是这样的:
[HttpPost]
public ActionResult test([DataSourceRequest]DataSourceRequest request,IEnumerable<DetailsDTO> products)
{
return View();
}
但是这个动作没有解雇。我不知道发生了什么。
答案 0 :(得分:1)
更改
.Update(update => update.Action("test", "Home"))
到
.Update(update => update.Action("test", "Home").Type(HttpVerbs.Post))
在我的应用程序中完成了这个技巧。我也在使用属性
[AcceptVerbs(HttpVerbs.Post)]
在我的控制器中。
增加:
另一个原因可能是模型。我不得不改变我的方法:
public async Task<ActionResult> UpdatePackageList([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<MyClass> products)
答案 1 :(得分:1)
我有同样的问题,经过一整夜的努力,我意识到剑道要求模型.Id值存在且独特。在我的情况下这不是真的,因为我是从代码(而不是从db)手动填充网格,所以我使用另一个保证具有唯一值作为Id的属性,并且它起作用。
Model(model =>
{
model.Id(x => x.MetreId);
}
答案 2 :(得分:0)
您需要将Controller方法更改为:
[HttpPost]
public ActionResult test([DataSourceRequest]DataSourceRequest request, [Bind(Prefix = "models")] IEnumerable<DetailsDTO> products)
{
return View();
}
还要确保您引用了脚本kendo.aspnetmvc.min.js