Kendo Grid
を使用してファイルをアップロードしようとしています。Kendo Upload
を使用すると、モデルとファイルが関連してアップロードが別々に行われないため、オプションを使用できません。剣道グリッドにファイルを追加する
私は、HttpPostedFileBase
フィールドをモデルに持ち、それをsave
イベントに設定するという2つのオプションを考えました。そして、そのファイルをaction method
の引数として受け取って、Data
メソッドupdate
とcreate
の設定を使用します。これらの方法の両方は、JavaScript runtime error: Argument not optional
のようなクライアント側のkendo
の例外に終わるでしょう。
これで私を導くことができれば感謝します。
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
};
};
グリッドの設定:私も別途Kendo Upload
を使用して、ファイルの名前を使用しようとしている
@(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")
)
)
グリッドのモデルはthis example、t彼の問題は、アップロードオブジェクトには機能がないことです。files
とgetFiles
は定義されていません。