剑道MVC网格保存事件未触发

时间:2016-11-02 17:10:04

标签: events grid kendo-asp.net-mvc

我在一个支持重新排序行的模板中有一个Kendo MVC Grid。我可以成功地拖放行并在发生这种情况时捕获事件(请参阅下面的处理程序),但除非我还编辑网格中的一个或多个单元格,否则单击“更新”按钮时不会触发“保存”事件。

drag-n-drop处理程序确实将受影响的模型设置为“脏”标志,但这似乎并未将其删除:

function onChangeEnumValueOrder(e) {
    var uid = $(e.draggableEvent.currentTarget).data("uid");
    var model = $("#TheGrid").data("kendoGrid").dataSource.getByUid(uid);
    model.dirty = true; 
}

任何提示或提示都将不胜感激。

[更新(网格定义)]

@(Html.Kendo().Grid<EnumItemViewModel>()
      .Name("TheGrid")
      .Columns(columns =>
      {
          columns.Bound(x => x.Id).Visible(false);
          columns.Bound(x => x.Key).Visible(false);
          columns.Bound(x => x.SortOrder).Width(10).Sortable(true);
          columns.Bound(x => x.Value).Width(100);
          columns.Command(command => command.Custom("Delete").Click("onDeleteEnumItem")).Width(100).Visible(true);
      })
      .DataSource(dataSource => dataSource
          .Ajax()
          .Model(model =>
          {
              model.Id(x => x.Key);
              model.Field(x => x.Id).DefaultValue(Guid.Empty);
              model.Field(x => x.Value);
          })
          .Read(read => read.Action("GetEnumItems", "SiteManagement").Data("getFieldIdEnumItemGrid"))
          .Create(create => create.Action("AddEnumItem", "SiteManagement"))
          .Update(update => update.Action("UpdateEnumItem", "SiteManagement"))
          .Destroy(destroy => destroy.Action("DeleteEnumItem", "SiteManagement"))
          .Events(events => events.Error("onErrorGrid('EnumGrid')"))
      )
      .Editable(editable => editable.DisplayDeleteConfirmation(false).Mode(GridEditMode.InCell))
      .ToolBar(toolbar => toolbar.Create())
      .Events(events => events.SaveChanges("onSaveEnumItemGrid")) // <-- EVENT NOT FIREING
      .Sortable(sort =>
      {
          sort.SortMode(GridSortMode.SingleColumn);
          sort.AllowUnsort(true);
      })
      )
@(Html.Kendo().Sortable()
      .For("#TheGrid")
      .Filter("table > tbody > tr")
      .Cursor("move")
      .HintHandler("hintHandlerSortable")
      .PlaceholderHandler("placeholderHandlerSortable")
      .ContainerSelector("#TheGrid tbody")
      .Events(events => events.Change("onChangeEnumValueOrder"))

1 个答案:

答案 0 :(得分:1)

onChangeEnumValueOrder中,按以下方式致电saveChanges()

function onChangeEnumValueOrder(e) {
    var uid = $(e.draggableEvent.currentTarget).data("uid");
    var model = $("#TheGrid").data("kendoGrid").dataSource.getByUid(uid);
    model.dirty = true; 

    $("#TheGrid").data("kendoGrid").saveChanges();
}

您可能还需要考虑设置这样的数据:

model.set('<Property Name>', <Property Value>)

因为这应该为你设置脏标志。