2013-01-11 43 views
0

我們遇到了一個小問題,通過Ajax加載多個部分視圖,我無法縮小範圍。通過ajax減緩mvc部分視圖的加載

頁面加載6個部分視圖點擊一個按鈕。

我們最初的部分視圖是由服務器在單個頁面上呈現的,但這意味着處理系列運行並且頁面沒有很快返回。

因此,我創建了一點點的javascript,它可以運行並異步ajax請求來刷新它們(請注意,部分視圖url在標記中呈現以使這更容易,暫時)。現在

function refreshAllPartials() { 
    $('div.partial').each(function() { 
     var partialView = $(this); 
     var partialViewUrl = $(partialView).attr('partialUrl'); 
     var parent = $(partialView).parent(); 
     $(parent).empty(); 
     $.ajax({ 
      url: partialViewUrl, 
      type: "GET", 
      async: true, 
      success: function (response, textStatus, jqXHR) { 
       $(parent).html(response); 
      } 
     }); 
    }); 
} 

,問題是,雖然局部視圖請求的每個大約需要0.7秒,返回,從Firebug的輸出顯示了一些不同的東西(使用招選中)。

Firebug output

從小提琴手的輸出是在幾毫秒內保持一致,但是螢火蟲輸出給用戶的視覺效果,彷彿不斷變化。

我猜想有一些我錯過了javascript的工作方式,以及如何渲染的作品,但也許我只是做錯了什麼?

我正在使用ASP.NET MVC3,但是,我不確定它是否相關,因爲Fiddler顯示IIS正在及時返回數據。

+0

這是在生產服務器上嗎?否則,您的開發服務器可能無法有效處理這麼多(幾乎是併發)的請求。爲什麼不直接從單個請求中提供JSON對象,從中可以更新所有的部分? – osahyoun

+0

我們已經在性能服務器上嘗試過了,它也是一樣的。這個問題與處理仍然需要連續運行的問題相同,我們會在顯示任何部分之前等待所有部分的數據返回。 – Martin

回答

1

此問題是控制器操作未標記爲只需要對會話狀態的讀訪問權限。

ASP.NET中有一個SessionState的「特性」,只有一個請求可以獨佔訪問該會話,並且所有其他請求都會在它後面「排隊」。

所有我需要做的是獨立的不需要的會話訪問寫入到另一個控制器,並添加操作方法:

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)] 

爲新控制器的屬性。

中提琴,非常高性能的網站,非常活潑。

+0

嗨,我試過了,但問題仍然存在:(( –

相關問題