我正在尝试使用Kendo Grid
上传文件,使用Kendo Upload
不是一个选项,因为模型和文件是相关的,上传不能单独发生。
我考虑了两个选项,在模型中有HttpPostedFileBase
字段并在save
事件中设置它。并在action method
中使用Data
和update
create
方法接收该文件作为参数。这两种方式都会导致客户端kendo
例外,例如JavaScript runtime error: Argument not optional
。
如果你能指导我,我将不胜感激。
Action method
签名:
public async Task<ActionResult> Update([DataSourceRequest] DataSourceRequest request, myViewModel model, HttpPostedFileBase file)
客户端功能:
var descRes = new function () {
this.onSave = function (e) {
var u2 = $('#upload2');
var data = new FormData();
var files = $('#upload2').get(0).files;
if (files.length > 0)
data.append('file', files[0]);
e.model.set('ImageFile', files[0]); // I have tried to set it to `data` too
};
this.getFile = function (e) {
var data = new FormData();
var files = $('#upload2').get(0).files;
if (files.length > 0)
data.append('file', files[0]);
return { file: data };
// return data; // I have also tried this, or returning `files[0]` directly
};
};
网格配置:
@(Html.Kendo().Grid<viewModel>()
.Name("grid")
// removed for brevity
.Editable(e => e.Mode(GridEditMode.InLine))
.Events(e => e
.Save("descRes.onSave")
)
.DataSource(ds => ds
.Ajax()
.Model(m =>
{
m.Id(x => x.Id);
})
.Read(r => r.Action("Read", "AssetRes").Data("descRes.readData"))
.Create(c => c.Action("Create", "AssetRes").Data("descRes.getFile"))
.Update(u => u.Action("Update", "AssetRes").Data("descRes.getFile"))
.Destroy("Delete", "AssetRes")
)
)
我也试图单独使用Kendo Upload
并在this example中使用网格模型中的文件名,问题是上传对象没有任何函数,{{1并且files
未定义。
答案 0 :(得分:0)
您可以为上传编写自定义网格编辑器。上传应该异步,因此您只能在上传文件时保存行。然后在您的模型中编写上载返回的TempFileID。 这样我就可以通过上传和更多数据创建网格。这有点棘手,但可能。