2013-02-28 39 views
2

我已經使用this jQuery plugin上傳文件。使用jQuery的ASP.NET MVC異步文件上傳

它工作正常單/多個文件。

但是,當我嘗試上傳90到100 MB大小的大文件時,它會阻止所有其他ajax調用。

雖然上傳這樣的大文件,如果我已經最小化窗口,我想訪問其他頁面,所有ajax調用將在隊列中,直到上傳完成。

文件上傳沒有任何問題,我可以上傳文件高達2 GB。但是,在上傳完成之前,我無法訪問我的網站的任何其他功能。

我該如何解決這個問題?

我想強制這個上傳過程異步工作,讓我訪問我的網站的所有其他網頁/功能。

是否有任何其他選項/插件可用,我用於此目的(無Flash)?

+0

我經歷過這樣的事情而回:http://stackoverflow.com/questions/4428413/why-would-multiple-simultaneous-ajax-calls這可能是由與SessionState屬性裝飾它做-to-the-same-asp-net-mvc-action-cause – Kev 2013-03-02 17:40:41

回答

3

如果您在控制器中使用ASP.NET會話,這是正常和預期的行爲。這是設計。 ASP.NET會話不是線程安全的,並且如果您嘗試觸發來自同一會話的並行請求,則ASP.NET將簡單地按順序阻止並執行2個請求。

如果您不想要這種行爲,您將不得不爲包含正在上傳的操作的控制器禁用會話。

[SessionState(SessionStateBehavior.Disabled)] 
public class SomeController: Controller 
{ 
    // You cannot use Session in this controller 

    [HttpPost] 
    public ActionResult Upload(MyViewModel model) 
    { 
     ... 
    } 
} 
+0

通過這樣做,我們怎麼能確保這個動作? – Adeel 2013-03-01 07:32:35

+0

通過使用Forms Authentication和'[Authorize]'屬性,這是在ASP.NET MVC中確保某些東西的標準方法。 – 2013-03-01 07:33:18

+0

如果我把SessionState屬性取得錯誤錯誤屬性'SessionState'在這個聲明類型上是無效的。它只對'類'聲明有效。 – 2013-03-01 08:24:50