2014-10-03 127 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