由于某种原因,在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);
})
答案 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";
}
};