2014-10-03 107 views
0

我使用Kendo UI MVC上傳控件一次上傳多個文件(即批量)。文件很清楚要做什麼,但我看到每個文件都有單獨的上傳請求,而不是所有的單個上傳請求。Kendo MVC上傳 - 批量上傳

這是我上傳的控制

Html.Kendo().Upload().Name("files") 
    .TemplateId("fileUploadTemplate") 
    .Events(e => 
     { 
     e.Upload("onFileUpload"); 
     }) 
     .HtmlAttributes(new { accept = ".xls,.csv" }) 
     .Messages(m => m.Select("Select Files...")) 
     .Async(a => a.Save("Upload", "Home").AutoUpload(false).Batch(true)) 

我用劍道模板添加2個字段代碼(開始&結束日期)針對每個上傳的文件,如下圖所示。

How the upload control is rendered on screen

這裏是模板代碼。

<script id="fileUploadTemplate" type="text/x-kendo-template"> 
     #var fileCount = $(".k-file .row").length;# 
     #var startId = 'PeriodStart_' + fileCount; # 
     #var endId = 'PeriodEnd_' + fileCount; # 

     <span class="k-progress"></span> 
     <div class="row"> 
     <div class="col-md-4"> 
      <span class="k-filename"><strong>#=name#</strong></span> 
     </div> 
     <div class="col-md-3 nopadding"> 
      Start: @(Html.Kendo().DatePicker().Name("#=startId#").ToClientTemplate()) 
     </div> 
     <div class="col-md-3 nopadding"> 
      End: @(Html.Kendo().DatePicker().Name("#=endId#").ToClientTemplate()) 
     </div> 
     <div class="col-md-1 text-right"> 
      <button type="button" class="k-upload-action"></button> 
     </div> 
    </div></script> 

這裏的事件處理JS代碼所採集開始&結束日期爲每個文件並構造一個JSON對象與多個文件一起發送到後端。

function onFileUpload(e) { 
    var fileInfo = getUploadFileMetaData();   
    var modelAsJson = JSON.stringify(fileInfo); 
    console.log(modelAsJson); 
    e.data = { 
     modelAsJson: modelAsJson 
    }; 
} 
function getUploadFileMetaData() { 
    var numOfFiles = $(".k-file .row").length; 
    var fileInfoArray = []; 
    for (var i=0; i<numOfFiles;i++){ 
     var fi = { 
      FileName: $(".k-filename strong")[i].innerText, //Filename is required as is since it'll be our key 
      PeriodStart: $("#PeriodStart_" + i).data('kendoDatePicker').value(), 
      PeriodEnd: $("#PeriodEnd_" + i).data('kendoDatePicker').value() 
     } 
     fileInfoArray[i] = fi; 
    } 
    return fileInfoArray; 
} 

所以,如果我選擇2個文件上傳我會看到被炒到控制器中的操作,而不是1,2個不同的請求我敢肯定,我沒有看到的東西直線前進和欣賞任何節目,並告訴。

+0

我已經簡化了整個事情很多,仍然未如預期的行爲。這是一個非常簡單的上傳控件,試圖將多個文件作爲一個批次上傳。 ()「。Upload()。Name(」filesTest「)。Async(a => a.Save(」UploadTest「,」Home「)。自動上傳(false).Batch(true))' – Uchitha 2014-10-07 05:39:09

+0

' m使用Kendo.MVC版本 - 2014.2.716.545 – Uchitha 2014-10-07 05:49:54

回答

0

我在Telerik論壇找到了交叉發佈的答案。

顯然這是不可能的。僅當用戶一次選擇多個文件(Ctrl + Select)時纔可以使用批處理操作模式,而不是多次單擊選擇文件按鈕逐個選擇它們時纔可以。只有當上傳控件包含1個訂單項時 - 也就是1個或多個文件時,才能以批量模式以另一種方式進行。

更多細節在這裏 - http://www.telerik.com/forums/batch-mode---not-working