2016-09-28 6 views
0

Ich versuche, eine Datei mit Kendo Grid hochladen, mit Kendo Upload ist keine Option, weil Modell und die Datei verwandt sind und Upload kann nicht separat passieren.Anhängen Datei in Kendo Grid

Ich habe zwei Optionen in Betracht gezogen, mit einem Feld im Modell und setzen Sie es im save Ereignis. Und Empfangen dieser Datei als ein Argument in der action method und unter Verwendung Data Methode von update und create Konfigurationen. Beide Möglichkeiten enden mit clientseitigen Ausnahmen wie JavaScript runtime error: Argument not optional.

Ich werde dankbar sein, wenn Sie mich damit führen könnten.

Action method Signatur:

public async Task<ActionResult> Update([DataSourceRequest] DataSourceRequest request, myViewModel model, HttpPostedFileBase file) 

Client-Seite Funktionen:

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 
    }; 
}; 

Grid-Konfiguration:

@(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") 
    ) 
) 

Ich bin auch Kendo Upload separat und verwenden Sie die Dateinamen zu verwenden versuchen, in das Gittermodell wie in this example, t Das Problem ist, dass das Upload-Objekt keine Funktionen hat, files und getFiles sind undefiniert.

Antwort

0

Sie können einen benutzerdefinierten Grid-Editor für den Upload schreiben. Der Upload sollte asynchron funktionieren, sodass Sie Ihre Zeile nur speichern können, wenn die Datei hochgeladen wird. In Ihrem Modell schreiben Sie dann die vom Upload zurückgegebene TempFileID. So habe ich Grids mit Uploads und weiteren Daten erstellt. Es ist ein bisschen schwierig, aber möglich.