2017-05-19 10 views
1

私は以下のように剣道アップロードをセットアップしました。剣道アップロードでIDでファイルを削除

@(Html.Kendo().Upload().Name("files") 
.Async(a => a 
    .Save("UploadAttachments", "Mycontroller") 
    .Remove("RemoveAttachments", "Mycontroller") 
    .SaveField("files") 
    .RemoveField("ids") 
    .AutoUpload(true)) 
.Events(e => e 
    .Success("onUploadSuccess") 
    .Error("onUploadError")) 
.Files(files => 
{ 
    foreach (var f in Model.Attachments) 
    { 
     files.Add().Name(f.FileName).Extension(Path.GetExtension(f.FileName)); 
    } 
})) 

UploadAttachments方法は、サーバのファイルにファイルを保存し、DBにレコードを作成し、次のモデル

Id-long 
FileName: fileName 

RemoveAttachments方法は、IDSを期待返します。既存の空のファイルを使用して作成する際に、IDを使用してファイルを削除できるようにファイルを更新する次のイベントハンドラがあります。

function onUploadSuccess(e) { 
    if (e.operation == "upload") { 
     e.files[0].data = e.response[0]; // hold the attachment detail 
     e.files[0].name = e.response[0].Id; // change name with id so it can be passed to remove method 
    } 
} 

しかし、既存のファイルでは、ファイルを更新したり、Model.AttachementsのIDをアップロード制御に割り当てる方法は考えられませんでした。

私はinitの間にidで名前を設定できますが、そのようにしてもファイルの名前を正しく表示することはできません。

foreach (var f in Model.Attachments) 
{ 
     files.Add().Name(f.Id.ToString).Extension(Path.GetExtension(f.FileName)); 
} 

これは、UIの間違ったファイル名を表示します。

答えて

0

このような動作は、現在、剣道アップロードコントロールではサポートされていません。しかし、現在のバージョンでそれを実現する1つの方法は、ある種のデリミタを使用し、nameプロパティの後にidを追加し、コントロールの内部_renderInitialFilesメソッドをオーバーライドして名前とIDを正しく取得することです。 removeイベントを使用して、名前の代わりにIDをサーバーに送信することもできます。

<div > 
    @(Html.Kendo().Upload() 
     .Name("files") 
     .Async(a => a 
      .SaveField("files") 
      .RemoveField("ids") 
      .Save("Save", "Upload") 
      .Remove("Remove", "Upload") 
      .AutoUpload(true) 
     ) 
     .Events(e=>e.Remove("fileRemove").Success("onUploadSuccess")) 
     .Files(files => 
     { 
       files.Add().Name("somename-someid").Extension(".txt"); 
     }) 
    ) 
</div> 

<script> 

    function assignGuidToFiles(files, unique) { 
     var uid = kendo.guid(); 

     return $.map(files, function (file) { 
      file.uid = unique ? kendo.guid() : uid; 

      return file; 
     }); 
    } 

    kendo.ui.Upload.fn._renderInitialFiles = function (files) { 
     var that = this; 
     var idx = 0; 
     files = assignGuidToFiles(files, true); 

     for (idx = 0; idx < files.length; idx++) { 
      var currentFile = files[idx]; 
      var delimiterIndex = currentFile.name.indexOf("-"); 
      currentFile.id = currentFile.name.substring(delimiterIndex + 1); 
      currentFile.name = currentFile.name.substring(0, delimiterIndex); 

      var fileEntry = that._enqueueFile(currentFile.name, { fileNames: [currentFile] }); 
      fileEntry.addClass("k-file-success").data("files", [files[idx]]); 

      if (that._supportsRemove()) { 
       that._fileAction(fileEntry, "remove"); 
      } 
     } 
    } 

    function onUploadSuccess(e) { 
     if (e.operation == "upload") { 

     } 
    } 

    function fileRemove(e) { 
     for (var i = 0; i < e.files.length; i++) { 
      e.files[i].name = e.files[i].id; 
     } 
    } 
</script> 
関連する問題