2016-09-28 91 views
0

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

我已经考虑了两种选择,在模型中有HttpPostedFileBase字段并将其设置在save事件中。并接收该文件作为action method中的参数并使用Data方法updatecreate配置。这两种方式最终都会以客户端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,t他的问题是上传对象没有任何功能,filesgetFiles未定义。

回答

0

您可以编写上传的自定义网格编辑器。上传应该异步工作,所以只有在文件上传时才能保存你的行。在你的模型中,你可以编写上传返回的TempFileID。 这样我创建了上传和更多数据的网格。这有点棘手,但可能。