按下更新后添加项目时,Kendo Grid内联编辑不会触发事件

时间:2014-04-29 16:34:06

标签: jquery asp.net-mvc kendo-ui telerik kendo-grid

由于某种原因,在Kendo Grid中以内联编辑模式添加项目时,不会触发更新事件。我一直在浏览文档并尝试尽可能地实现代码。我一直在监视firebug,控制台从不显示任何活动。 demo效果很好,但我的代码没有。

在从网格中编辑或删除项目时,它可以正常工作,但在创建项目时,无效,无活动。可能问题可能是GroupID还没有宣布Guid,因此网格不会触发事件吗? (我完全凭空冥想,我不知所措)

我的剃刀代码:

@(Html.Kendo().Grid<GroupViewModel>()
  .Name("GroupGrid")
  .Columns(columns =>
      {
          columns.Bound(c => c.GroupID).Hidden();
          columns.Bound(c => c.Name);
          columns.Bound(e => e.FK_CategoryID).EditorTemplateName("CategoriesList").Title("Category").ClientTemplate("#:CatName#");
          columns.Command(command => { command.Edit(); command.Destroy(); }).Width(170);
      })
  .HtmlAttributes(new { style = "width: 500px;" })
  .ToolBar(toolbar => toolbar.Create())
  .Editable(editable => editable.Mode(GridEditMode.InLine))
  .Scrollable(s => s.Enabled(false))
  .Selectable(s => s.Enabled(true).Mode(GridSelectionMode.Single))
  .DataSource(dataSource => dataSource
                                .Ajax()
                                .Read(read => read.Action("Group_Grid_Read", "Home"))
                                .Events(events => events.Error("error_handler"))
                                .Model(model => model.Id(p => p.GroupID))
                                .Create(update => update.Action("EditingInline_Create", "Home"))
                                .Update(update => update.Action("EditingInline_Update", "Home"))
                                .Destroy(update => update.Action("EditingInline_Destroy", "Home"))
  )
  .Events(e => e.Change("onGroupGridChange").Save("GroupGrid_Save"))
)

我的控制器操作:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditingInline_Create([DataSourceRequest] DataSourceRequest request, GroupViewModel groupViewModel)
{
    if (groupViewModel != null && ModelState.IsValid)
    {
        // add group
        // abbreviated
    }

    return Json(new[] { groupViewModel }.ToDataSourceResult(request, ModelState));
}

我的ViewModel:

public class GroupViewModel
{
    public Guid GroupID { get; set; }
    public string Name { get; set; }
    public Guid? FK_CategoryID { get; set; }
    public string CatName { get; set; }
}

### EDITED ###

我想我偶然发现了什么。我更改了列绑定以包含所有四列而不是隐藏它们。这样做时,我可以填充所有四个字段。在这之后,事件终于被解雇了。

现在我有关于 GroupID Guid的另一个问题。由于我想隐藏 GroupID CatName 变量,如何使用“new Guid()”填充 GroupID 单击添加新记录按钮 CatName “new string()”

似乎问题在于对新记录的验证。

.Columns(columns =>
{
    columns.Bound(c => c.GroupID);
    columns.Bound(c => c.Name);
    columns.Bound(e => e.FK_CategoryID).EditorTemplateName("CategoriesList").ClientTemplate("#:CatName#");
    columns.Bound(c => c.CatName);
    columns.Command(command => { command.Edit(); command.Destroy(); }).Width(170);
})

1 个答案:

答案 0 :(得分:0)

您可以隐藏GroupID和CatName,并在Kendo Grid调用dataSource..parameterMap期间提供值。

通过为dataSource.transport.parameterMap提供处理程序,您可以在将数据发送到控制器之前修改新添加的行的字段。例如。 :

$("#GroupGrid").data("kendoGrid").dataSource.transport.parameterMap = function (data, operation) { for(var i in data.models) { data.models[i].GroupID = new GUID(); data.models[i].CatName = "Doge"; } };