2016-04-20 98 views
3

考慮下面的代碼片段的onclick存儲相同的值多次

[HttpPost] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Create(MyViewModel viewModel) 
{ 
     if (ModelState.IsValid) 
     { 
      //map properties here 

      using (var context = new MyEntities()) 
      { 
       context.Users.Add(user); 
       context.SaveChanges(); 
      } 

      if (Request.Files.Count > 0) 
      { 
       foreach (string fileName in Request.Files) 
       { 
        HttpPostedFileBase file = Request.Files[fileName]; 
        if (file != null && file.ContentLength > 0) 
        { 
         //do checks and upload file here 
        } 
       } 
      } 
     } 
     return RedirectToAction("Index", "Home"); 
} 

的形式可以提交作爲一個獨立的或與隨後獲得上傳到服務器上的文件。現在我的問題是如果我提交表單沒有任何文件或只有一個文件,然後一切按預期工作。但是,用戶一次可以上傳多個文件,這就是問題出現的地方。文件會上傳,但我在數據庫中爲該特定表單獲取了多個條目。例如,如果用戶上傳三個文件,我會在數據庫中得到三個完全相同的條目。

所以我的問題是如何解決這個問題?

在我使用DropZoneJs和調用該方法的客戶端作爲

<script> 
    Dropzone.autoDiscover = false; 
    var myDropZone = new Dropzone("#dzUpload", { 
     url: "/Home/Create", 
     autoProcessQueue: false, 
     previewsContainer: ".preview", 
    }); 

    $("#submit-all").attr("type", "button").on('click', function (e) { 
     e.preventDefault(); 
     e.stopPropagation(); 

     if (myDropZone.getQueuedFiles().length > 0) { 
      myDropZone.options.autoProcessQueue = true; 
      myDropZone.processQueue(); 
     } 
     else { 
      $("#dzUpload").submit(); 
     } 
    }); 
</script> 

我也遇到this的問題,但我仍然有同樣的問題

回答

1

它看起來像uploadMultiple選項將改變行爲,所以只有一個請求被髮送到服務器。

var myDropZone = new Dropzone("#dzUpload", { 
    url: "/Home/Create", 
    autoProcessQueue: false, 
    previewsContainer: ".preview", 
    uploadMultiple: true, 
}); 
+0

這正是我使用的問題已修復 – Code

0

因此,如果我是正確的,插件會發布每個文件的形式,你放入你的插件嗎?一種方法是生成一個GUID並將其保存在表單隱藏輸入中。所以每次你的插件發佈它都會發布這個GUID。因此,根據Guid將插入語句更改爲upsert(更新或插入)..您必須將此GUID與其他數據一起保存。

因此,每當您打算插入檢查GUID是否已存在時If所以更新它插入新的記錄。

相關問題