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); 
    } 
}); 

};

相關問題