2016-08-18 84 views
0

我在模態窗口問題中有一個kendoUpload小部件 - 如果您關閉該窗口,然後再次打開它的kendoUpload小部件,就好像創建了它的某些部分的幾個實例。因此,當您打開和關閉窗口時,它會創建儘可能多的記錄並上傳。什麼會導致問題。每次當窗口關閉但沒有運氣時,我試圖銷燬kendoUpload小部件。也許是因爲錯誤的語法......任何想法?謝謝!KendoUpload小部件重複問題

enter image description here

現在我關閉並重新打開模態窗口 - >

enter image description here

現在,我嘗試上傳一個文件 - >

enter image description here

HTML:

<div id="UploadFiles" style="display: none"> 
<h3>Upload your files:</h3> 
<div class="demo-section k-content"> 
    <input name="files" id="files" type="file"/> 
</div> 
<br/> 
<h3>Current files on server:</h3> 
<div id="CurrentFilesOnServer"> 
    <ul class="CurrentFilesOnServerList"> 

    </ul> 
</div> 

模態窗口:

// Modal Window Upload file to server 
    var uploadFilesWindow = $("#UploadFiles").kendoWindow({ 
     width: "350px", 
     modal: true, 
     title: "Upload file to server:", 
     actions: [ 
      "Pin", 
      "Minimize", 
      "Maximize", 
      "Close" 
     ], 
     close: function() { 

     } 
    }).data("kendoWindow"); 

JS上傳部分:

// upload file on server 
    $(".k-grid-upload") 
     .click(function() { 
      uploadFilesWindow.center().open(); 

      function upload() { 

     $("#files") 
       .kendoUpload({ 
        async: { 
         saveUrl: "/api/Grid/UploadFileOnServer", 
         removeUrl: "", 
         autoUpload: true 
        } 
      } 
     }); 
}); 

C#控制器:

// Upload file on server 

    public string UploadFileOnServer() 
    { 

     var file = HttpContext.Current.Request.Files.Count > 0 ? 
    HttpContext.Current.Request.Files[0] : null; 

     if (file != null && file.ContentLength > 0) 
     { 
      var fileName = Path.GetFileName(file.FileName); 

      var path = Path.Combine(
       HttpContext.Current.Server.MapPath("~/uploads"), 
       fileName 
      ); 

      file.SaveAs(path); 
     } 

     return file != null ? "/uploads/" + file.FileName : null; 


    } 

回答

0

這是很肯定的是,代碼,初始化上傳插件,執行多次,從而導致複製初始化和所觀察到的問題。

http://docs.telerik.com/kendo-ui/intro/installation/jquery-initialization#duplicate-initialization

銷燬劍道UI控件不從DOM(唯一的例外是Window)刪除生成的HTML標記,因此破壞了上傳也無濟於事。

http://docs.telerik.com/kendo-ui/intro/widget-basics/destroy

你需要重構代碼,這樣上傳被初始化只有一次,就像窗口。或者,銷燬並重新創建整個Window,但請記住它的DOM將被刪除,並且您需要將其添加回來。

http://docs.telerik.com/kendo-ui/controls/layout/window/overview#configuration-Destroy

+0

thx它幫了很多! (我只初始化實例一次)。 –

0

改變了這樣的代碼,現在它工作正常:

初始化kendoUpload:

var kup = $("#files") 
     .kendoUpload({ 
      async: { 
       saveUrl: "/api/Grid/UploadFileOnServer", 
       removeUrl: "", 
       autoUpload: true 
      } 
     }); 

打開窗口&呼叫kendoUpload例如:

$(".k-grid-upload") 
     .click(function() { 
      uploadFilesWindow.center().open(); 
      kup(); 
     }); 

(Thx to @dimodi!)