2012-08-14 80 views
0

我有以下问题:我有一个自定义编辑命令的telerik mvc网格。这是网格的代码:telerik mvc网格与ajax绑定

Html.Telerik().Grid<Customer>("customers") 
         .Name("Grid") 
         .DataKeys(k => k.Add(o => o.Id)) 
         .DataBinding(dataBinding => dataBinding.Ajax().Delete("Delete", "Customer").Select("AjaxIndex", "Customer")) 
         .Scrollable(builder => builder.Height(350)) 
         .Filterable() 
         .Sortable(s => s.OrderBy(order => order.Add(o => o.Id).Descending())) 
         .Columns(c => 
           { 
            c.Bound(o => o.Id); 
            c.Bound(o => o.FirstName); 
            c.Command(s => 
                { 
                 s.Custom("editCustomer") 
                  .Text("Edit") 
                  .Ajax(true) 
                  .Action("Edit", "Customer"); 
                  s.Delete().ButtonType(GridButtonType.Image);                            }).Width(175); 
           }) 
       .ClientEvents(builder => builder.OnComplete("onEditComplete")) 
        .Pageable(p => p.PageSize(5)) 
        .Selectable() 
        .Render(); 

这是回叫编辑命令的javascript函数:

function onAppraisalPhaseComplete(e) 
{ 
    if (e.name == "editCustomer") { 
     $("#dialog-form").html(e.response.PartialViewHtml); 
     open($("#dialog-form"), "Edit Customer"); // this will display a modal with the edit view 
    } 
} 

编辑形式是一个AJAX调用下面的方法:

public ActionResult JsonEdit(Customer customer) 
    { 
     if ((Rules.GetBrokenRules(customer).Count == 0))// there is no validation errors 
     { 
      Repository.Update(customer); 
     } 
     else 
     { 
      ModelState.AddModelErrors(Rules.GetBrokenRules(customer)); 
      return Json(new 
      { 
       Success = false, 
       PartialViewHtml = RenderPartialViewToString("Insert", appraisalPhaseViewModel) 
      }); 
     } 
//if save successful get the customers list and return the partial of the grid in Json 
     var customers= Repository.GetAll().ToList(); 
     ViewData["customers"] = customers; 

     return Json(new 
     { 
      Success = true, 
      PartialViewHtml = RenderPartialViewToString("MasterGrid") 
     }); 

上完整的AJAX调用如下:

function JsonSave_OnComplete(context) { 
     var jsonEdit = context.get_response().get_object(); 
     if (jsonEdit.Success) { // if the operation is successful reload grid and close the modal dialog 
      $("#MasterGridDiv").html(jsonEdit.PartialViewHtml); 
      CloseDialog($('#dialog-form')); 
     } else { //Redisplay the edit partial view in the modal 
      $("#dialog-form").html(jsonEdit.PartialViewHtml); 
     } 
    } 

编辑操作完成后,如果我尝试按下删除按钮,它将调用JsonEdit操作而不是删除操作。我不知道我在这里做错了什么?另外,有时候删除按钮不起作用,而调用ajax绑定而不是删除按钮。

回答

2

您没有为按钮提供完整的JavaScript处理程序,只是回调。我应该假设你做对了。但是,您的代码存在明显的问题。您尝试通过从服务器端渲染的视图注入html手动重新绑定telerik网格。 这可能会导致您的客户端事件模型无法预料地蜂巢。 相反的:

$("#MasterGridDiv").html(jsonEdit.PartialViewHtml); 

尝试使用:

$("#Grid").data("tGrid").rebind(); 
相关问题