【问题标题】:Telerik MVC grid custom command not rebinding JSONTelerik MVC 网格自定义命令未重新绑定 JSON
【发布时间】:2012-06-25 03:46:59
【问题描述】:

我有一个带有自定义命令按钮的 Telerik 网格,它应该复制一行。命令按钮调用 JsonResult 控制器方法。它复制线并返回模型,但网格没有改变 - 因为它没有重新绑定,我认为。

我以为它会自动发生。

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

【问题讨论】:

    标签: asp.net-mvc json asp.net-mvc-3 model-view-controller telerik


    【解决方案1】:

    你应该打电话

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

    在您的自定义命令在 javascript 中执行之后。

    这会强制网格重新绑定。

    【讨论】:

    • 我发现它的作用是调用 .Select 绑定事件,该事件再次从数据库中获取数据。它不使用我与复制的行一起传回的 JSON 结果,它会覆盖它。
    【解决方案2】:

    您应该使用 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);
        }
    });
    

    };

    【讨论】:

      猜你喜欢
      • 2011-10-12
      • 2017-10-30
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多