我设置了一个Kendo Grid
,其中包含一个分配了ComboBox
编辑器模板的列。这很好用,并检索我期望的项目:
columnSchema.push({ field: "Comment", title: 'Comment', editor: commentDropDownEditor, template: "#=Comment.Description#" });
产生以下内容:
我的问题是我现在正在尝试扩展“注释”列的属性,以便用户可以输入新项目,即注释,这些注释将被保存到数据库以供重用。
到目前为止,我已经完成了以下工作......
设置commentDropDownEditor
功能:
function commentDropDownEditor(container, options) {
$('<input name="' + options.field + '"/>')
.appendTo(container)
.kendoComboBox({
suggest: true,
change: onComboBoxChange,
autoBind: false,
optionLabel: "Select comment...",
dataTextField: "Description",
dataValueField: "ID",
dataSource: {
type: "json",
autoSync: true,
transport: {
read: "CommentsAsync_Read",
create: {
url: "CommentsAsync_Create",
dataType: "json"
}
}
}
});
$('<span class="k-invalid-msg" data-for="' + options.field + '"></span>').appendTo(container);
}
将change
事件连接到以下函数:
function onComboBoxChange(e) {
var combo = e.sender;
// check if new value is a custom one
if (!combo.dataItem()) {
// select the newly created dataItem after the data service response is received
combo.one("dataBound", function () {
combo.text(combo.text());
});
// create a new dataItem. It will be submitted automatically to the remote service (autoSync is true)
combo.dataSource.add({ Description: combo.text() });
}
}
我可以通过控制台窗口看到onComboBoxChange
函数(包括将新项添加到组合框数据源的行),但关联的Create
传输函数未被执行该项目也未添加到Combo Box
。
Create
中的 Controller
函数如下:
[HttpPost]
public async Task<ActionResult> CommentsAsync_Create([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<Comment> comments)
{
if (comments.Any())
{
//await _manager.CreateCommentAsync(comments);
}
return Json(comments.ToDataSourceResult(request, ModelState));
}
我有什么遗漏/做错了让这个工作?