0

我有一个Telerik网格自定义命令按钮,它应该复制一行。命令按钮调用JsonResult控制器方法。它复制这条线并返回模型,但网格不会改变 - 因为它不是重新绑定,我想。Telerik MVC网格自定义命令不重新绑定JSON

我认为这会发生自动。

Html.Telerik().Grid<MerchantPageModel>() 
      .Name("PageChooserGrid") 
      .DataKeys(keys => keys 
           .Add(c => c.PageID) 
           .RouteKey("PageID")) 
      .Columns(cols => 
       { 
        cols.Bound(c => c.Name).Width(300).ClientTemplate("<input type='text' name='name' value='<#= Name #>' readonly='true' />"); 
        cols.Bound(c => c.Template).Width(400).ClientTemplate("<input type='text' name='template' value='<#= Template #>' readonly='true' />"); 
        cols.Bound(c => c.Author).Width(100).ClientTemplate("<input type='text' name='author' value='<#= Author #>' readonly='true' />"); 
        cols.Bound(c => c.ModifiedDate).Format("{0:MM/dd/yyyy}").Width(120).ClientTemplate("<input type='text' name='modifieddate' value='<#= ModifiedDate #>' readonly='true' />"); 
        cols.Bound(c => c.IncludeInNav).ClientTemplate("<input type='checkbox' name='IncludeInNav' value='<#= IncludeInNav #>' <#= populateCheckboxes(IncludeInNav) #>' />") 
         .Title("Include In Nav") 
         .Width(100); 
        cols.Command(commands => 
         { 
          commands.Edit().ButtonType(GridButtonType.Text); 
          commands.Custom("Copy").Text("Copy").DataRouteValues(route => route.Add(o => o.PageID).RouteKey("PageID")).Ajax(true) 
           .Action("_AjaxCopyPage", "SetupWizard"); 
          commands.Delete().ButtonType(GridButtonType.Text); 
         }).Title("Action List"); 
       }) 
      .DataBinding(data => data.Ajax() 
            .Select("_AjaxBinding", "SetupWizard") 
            .Update("_AjaxEditing", "SetupWizard") 
            .Delete("_AjaxDelete", "SetupWizard")) 
      .Pageable() 
      .Sortable() 
      .ClientEvents(events => 
       { events.OnComplete("Grid_onComplete"); 
        events.OnCommand("Grid_onCommand"); 
        events.OnDataBound("Grid_OnDataBound"); 
        events.OnDataBinding("Grid_OnDataBinding"); 
       }) 
       .EnableCustomBinding(true) 
      .Render(); 

并回到:

return Json(pageModel.Pages, JsonRequestBehavior.AllowGet); 

回答

2

你应该在JavaScript执行您的自定义命令后,打电话

var grid = $('#PageChooserGrid').data('tGrid'); 
grid.rebind(); 

这迫使电网重新绑定。

+0

我发现它所做的是调用.Select绑定事件,并从数据库中获取数据。它不会使用我复制的行传回的JSON结果,它会覆盖它。 – PeterG

0

您应该使用OnComplete方法。

events.OnComplete("Grid_OnComplete"); 

和你的JS代码应该是这样的

function Grid_OnComplete(e) { 
if (e.name == "copy") { 
    $("#" + e.currentTarget.id).data("tGrid").dataBind(e.response.data); 
} 

}

我们有一堆普通自定义函数在我们的电网,并连接到事件像这样。

var bindGridComplete = function ($grid) { 
$grid.on('complete', function (e) { 
    if (e.name == "copy") { 
     $("#" + e.currentTarget.id).data("tGrid").dataBind(e.response.data); 
    } 
}); 

};