2014-10-03 4 views
0

Я использую Kendo UI MVC Upload control для загрузки нескольких файлов одновременно (например, партии). В документации достаточно ясно, что делать, но я вижу отдельные запросы на загрузку для каждого файла, а не для одиночного запроса на загрузку для всех.Kendo MVC Upload - Batch Upload

Вот мой код для контроля загрузки

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 код, который собирает Start & дату окончания для каждого файла и создает объект 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 файлов для загрузки я вижу 2 различных запросов обжигали в контроллер действий вместо 1. Я уверен, что я не вижу что-то прямо вперед и оценить любое шоу и сказать.

+0

Я упростил все это много и до сих пор поведение не как ожидалось. Вот очень простой элемент управления загрузкой, который пытается загрузить несколько файлов в виде одной партии. 'Html.Kendo(). Upload(). Name (" filesTest "). Async (a => a.Save (" UploadTest "," Home "). AutoUpload (false) .Batch (true))' – Uchitha

+0

I ' м с использованием версии Kendo.MVC - 2014.2.716.545 – Uchitha

ответ

0

Я нашел ответ, перейдя на форум Telerik.

Видимо это не возможно. Пакетный режим работы возможен только тогда, когда пользователь выбирает несколько файлов за один раз (Ctrl + Select), а не когда она выбирает их один за другим, несколько раз щелкая кнопку выбора файлов. Поставить его по-другому, пакетный режим возможен, только если элемент управления загрузкой имеет 1 позицию - будь то 1 или более файлов.

Подробнее здесь - http://www.telerik.com/forums/batch-mode---not-working