Telerik Kendo Grid (MVC) 更新后刷新
Posted
技术标签:
【中文标题】Telerik Kendo Grid (MVC) 更新后刷新【英文标题】:Refresh after update Telerik Kendo Grid (MVC) 【发布时间】:2014-07-31 05:44:42 【问题描述】:我有一个带有一些环境数据的剑道网格。网格的字段之一是“isDefault”,它接收 1 或 0(对于真或假)。在数据库中,我有一个触发器,当某些记录设置为 isDefault = 1 时,任何其他记录都会更新为 isDefault = 0,以确保只有一个默认环境。
Kendo 网格工作正常,它绑定数据并更新记录就好了,但更新后,网格没有刷新所有记录,如果有,比如说,isDefault =1 的记录 1,我更新记录 4 到 isDefault = 1 触发触发器并将所有其他记录更新为 isDefault = 0 但网格仍然显示记录 1 和 isDefault = 1 现在记录 4 和 isDefault = 1
这是我认为的代码:
html.Kendo().Grid<Models.Environment>()
.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());
提前感谢您的回答。
【问题讨论】:
【参考方案1】:我终于让它工作了。添加了一个事件处理程序:
Html.Kendo().Grid<Models.Environment>()
.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<XML_Environment> 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<XML_Environment, string>(c => c.EnvironmentName).ToList<XML_Environment>();
【讨论】:
【参考方案2】:您返回了错误的对象。我真的不知道您是如何获取数据的,因为您没有发布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
有关完整示例,请参阅this link。
【讨论】:
感谢您的回答,我会尝试并回复我的结果。 您好,在最后一行(评论 3)中,我认为您的意思是updatedRecords.ToDataSourceResult
而不是 ModelState.ToDataSourceResult
。无论哪种方式都行不通。我也尝试了您发布的相同示例,但没有。以上是关于Telerik Kendo Grid (MVC) 更新后刷新的主要内容,如果未能解决你的问题,请参考以下文章
Telerik Kendo MVC Grid 子模板从父模板获取默认值
Telerik Kendo UI ASP.NET MVC Grid - 已保存数据项的事件处理