2014-01-29 30 views
-1

我在VS2013上有一個asp.net 4.5(C#)頁面。在這個頁面中,我使用循環來拋出一些對象。爲每個對象(產品)我有一個文本框(輸入與類型=文本框),我使用jquery使其成爲一個微調。asp頁面內的很多javascripts標籤使性能低下

我需要這個在每個產品的循環內,因爲我希望每個微調控制器都有來自對象的參數(最小,最大,步長,是十進制等)。

的循環將類似的東西:

foreach (Product product in getCart().ItemsList()) { 
    String spinnerId = "spinner_" + product.Code;%> 
     <input id="<%:spinnerId %>" name="<%:product.Code%>"> 
     <script type="text/javascript" language="javascript"> 
      setSpinner('<%:spinnerId%>','<%:product.min%>','<%:product.max%>','<%product.step%>'); 
     </script> 
    <%}%> 

,並在頁面的頭,我有:

function setSpinner(id,minVal,maxVal,stepVal){ 
      j("#"+id).spinner({ 
       min: minVal, 
       max: maxVal, 
       step: stepVal, 
      }); 
     } 

的問題是,當我有循環越過了幾次(10-15)頁面加載非常乾淨,「已準備就緒」函數需要幾秒鐘才能執行,這意味着需要隱藏的某些字段顯示爲2秒,且僅比disaperas顯示(這包括ajaxcontroltoolkit控件,如popupextender面板等)。

爲了簡單起見,JavaScript代碼本身並不重要。 如果您嘗試如下所示:

<%for (int i=0;i<100;i++){%> 
<script type="text/javascript" lang="javascript"> 
</script> 
<%}%> 

發生同樣的問題。

它似乎即使是一個空的JavaScript塊,使頁面需要很長時間才能完成,如果你多次使用它。

爲什麼50 \ 100空的JavaScript塊使頁面滯後如此糟糕?以及我能做些什麼來解決這個問題,考慮到我必須對每個對象數據使用JavaScript代碼?

+0

不知道。但它很醜,難以維護。在一個腳本塊內部做你的東西。 – roland

+0

這並沒有解決任何這個問題。如何在一個區塊中爲每個產品(最小,最大,步長)製作具有不同數值的微調器? – Programer

+0

你可以爲你想要做的事情創建一個jsfiddle,很難讀懂這個問題。 –

回答

0

嘗試添加您需要的信息data-HTML屬性,並調用JavaScript一次。像

foreach (Product product in getCart().ItemsList()) { 
    String spinnerId = "spinner_" + product.Code;%> 
     <input id="<%:spinnerId %>" class="spinner" name="<%:product.Code%>" data-min="<%:product.min%>" data-max="<%:product.max%>" data-step="<%:product.step%>"> 
<%}%> 

東西。然後就重複使用jQuery的 「微調」 級輸入:

$("input.spinner").each(function(intput){ 
    $(this).spinner({ 
     min: $(this).data('min'), 
     max: $(this).data('max'), 
     step: $(this).data('step'), 
    }); 
}); 
+0

是否可以在非html5瀏覽器中使用數據標籤? – Programer

+0

我得到以下錯誤:「對象#沒有方法'數據'」 – Programer

+0

它看起來像你需要在jQuery中重新包裝對象,我更新了我的答案中的代碼。如果不使用解決方法,您可能無法在非HTML5瀏覽器中使用數據屬性。請參閱http://stackoverflow.com/questions/2412947/do-html5-custom-data-attributes-work-in-ie-6 –

0

看看@大衛答:第一,肯定是一個更好的方法

由@roland清除這是醜陋的。即使您需要將js注入網頁,也可以使用 。最好先注入一個js對象,然後包含所有對象的數組,然後在page load的單個塊中迭代並完成工作。

VAR PS = getCart()ItemsList()選擇(P =>新{ p.Id /...您的所有propertiese .../ })。

現在使用任何json庫(如Newtonsoft.Json)將ps注入網頁/腳本標記中。

var jsonString = JsonConvert.SerializeObject(ps);