更新Telerik Kendo Grid(MVC)后刷新

我有一个带有一些环境数据的Kendo Grid。 网格的一个字段是“isDefault”,它接收1或0(表示真或假)。 在数据库中,我有一个触发器,当某个记录设置为isDefault = 1时,任何其他记录都更新为isDefault = 0,只是为了确保只有一个默认环境。

Kendo网格工作正常,它绑定数据并更新记录就好了但是在更新之后,网格没有刷新所有记录,如果有,比方说,记录1,isDefault = 1,我更新记录4到isDefault = 1触发器被触发并将所有其他记录更新为isDefault = 0但网格仍然显示记录1,isDefault = 1,现在记录4,isDefault = 1

这是我视图中的代码:

Html.Kendo().Grid() .Name("environmentGrid") .Sortable() .ToolBar(tb => tb.Create()) .Editable(editable => editable.Mode(GridEditMode.PopUp)) .Columns(cols => { cols.Bound(c => c.Name).Width(150).Sortable(true); cols.Bound(c => c.ConnectionString).Width(150).Sortable(true); cols.Bound(c => c.Template).Width(150).Sortable(true); cols.Bound(c => c.isDefault).Width(150).Sortable(true); cols.Bound(c => c.StatusID).Width(150).Sortable(true); cols.Command(command => { command.Edit();}).Width(60); }) .DataSource(ds => ds .Ajax() .Model(model => { model.Id(m => m.EnvironmentID); }) .Read(r => r.Action("GetEnvironments", "Admin")) .Update(update => update.Action("UpdateEnvironments", "Admin")) .Create(update => update.Action("UpdateEnvironments", "Admin")) ) 

这是我的控制器上的代码:

 [AcceptVerbs(HttpVerbs.Post)] public ActionResult UpdateEnvironments([DataSourceRequest] DataSourceRequest dsRequest, Environment environment) { environment.ModifiedBy = userName; if (environment != null && ModelState.IsValid) { if (environment.EnvironmentID != 0) { var toUpdate = xgr.EnviromentRepository.ListAll().FirstOrDefault(p => p.EnvironmentID == environment.EnvironmentID); TryUpdateModel(toUpdate); } xgr.EnviromentRepository.Save(environment); } return Json(ModelState.ToDataSourceResult()); } 

提前感谢您的回答。

我终于开始工作了。 添加了事件处理程序:

 Html.Kendo().Grid() .Name("environmentGrid") .Sortable() .ToolBar(tb => tb.Create()) .Editable(editable => editable.Mode(GridEditMode.PopUp)) .Columns(cols => { cols.Bound(c => c.Name).Width(150).Sortable(true); cols.Bound(c => c.ConnectionString).Width(150).Sortable(true); cols.Bound(c => c.Template).Width(150).Sortable(true); cols.Bound(c => c.isDefault).Width(150).Sortable(true); cols.Bound(c => c.StatusID).Width(150).Sortable(true); cols.Command(command => { command.Edit();}).Width(60); }) .DataSource(ds => ds .Ajax() .Model(model => { model.Id(m => m.EnvironmentID); }) .Events(events => { events.RequestEnd("onRequestEnd"); //I've added this }) .Read(r => r.Action("GetEnvironments", "Admin")) .Update(update => update.Action("UpdateEnvironments", "Admin")) .Create(update => update.Action("UpdateEnvironments", "Admin")) ) 

和一个Javascript函数:

 function onRequestEnd(e) { if (e.type == "update") { $("#environmentGrid").data("kendoGrid").dataSource.read(); } } 

另外我需要修改EnvironmentRepository上的ListAll()方法,如下所示:

  public List ListAll() { _dataContext = new XMLGenEntitiesDataContext(); //I've to add this line. so the context is instantiated every time I call the ListAll Method. return _dataContext.XML_Environments.OrderBy(c => c.EnvironmentName).ToList(); } 

你正在返回错误的对象。 我真的不知道你是如何得到你的数据的,因为你没有发布GET控制器,所以我将尝试猜测它。 更新数据后,需要将它们发送回网格。 ModelState不包含您想要的数据。 试试这个:

 [AcceptVerbs(HttpVerbs.Post)] public ActionResult UpdateEnvironments([DataSourceRequest] DataSourceRequest dsRequest, Environment environment) { environment.ModifiedBy = userName; var updatedRecords = null;//1 if (environment != null && ModelState.IsValid) { if (environment.EnvironmentID != 0) { var toUpdate = xgr.EnviromentRepository.ListAll().FirstOrDefault(p => p.EnvironmentID == environment.EnvironmentID); TryUpdateModel(toUpdate); updatedRecords = xgr.EnviromentRepository.ListAll();//2 -- you might need to add "ToList()", depending on your implementation } xgr.EnviromentRepository.Save(environment); } return Json(updatedRecords.ToDataSourceResult(request, ModelState));//3 } 

请参阅此链接以获取完整示例。