在Kendo Grid中附加文件

时间:2016-09-28 04:51:08

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

我正在尝试使用Kendo Grid上传文件,使用Kendo Upload不是一个选项,因为模型和文件是相关的,上传不能单独发生。

我考虑了两个选项,在模型中有HttpPostedFileBase字段并在save事件中设置它。并在action method中使用Dataupdate 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未定义。

1 个答案:

答案 0 :(得分:0)

您可以为上传编写自定义网格编辑器。上传应该异步,因此您只能在上传文件时保存行。然后在您的模型中编写上载返回的TempFileID。 这样我就可以通过上传和更多数据创建网格。这有点棘手,但可能。