2014-07-21 45 views
1

在ASP.NET(Web窗體)中,我從SQL數據庫中檢索一組鍵/值對以用於DropDownList。這個列表非常大(可以超過2000個條目)並且在網站上的許多頁面上多次使用,並且我一直在研究如何在本地客戶端上緩存這組數據以減少帶寬。該列表不會經常更改,因此在一週或更長時間內使用緩存副本應該沒問題。ASP.NET到HTML5 localStorage

我想知道是否有可能使用HTML5本地存儲器存儲此列表,以及是否從客戶端存儲中填充DropDownList填充。如果在本地找不到數據,則繼續查詢數據庫中的列表。

+1

聽起來像一個合理的想法。你有什麼嘗試,你卡在哪裏? – David

+0

我可以通過將信息轉儲到頁面上的隱藏控件,然後使用JavaScript從那裏接收它,將列表數據存入本地存儲。該方法仍然查詢數據庫,並在每次加載時將數據傳輸到頁面。我希望社區知道更好的方法來解決客戶端和服務器之間的這條鏈。 – defect833

+2

聽起來就像在數據庫查詢之前要確定數據是否存在客戶端*一樣。在這種情況下,你正在做的是通過AJAX而不是'Page_Load'獲取數據。這樣,您可以在發出AJAX請求之前使用JavaScript檢查緩存的數據。爲此,你將要考慮使用AJAX。 – David

回答

1

如果你在一個選擇框中有超過2000個條目,它就會發出所有可用的聲音。

看看類似於Select2的東西。特別是「加載遠程數據」的例子。

http://ivaynberg.github.io/select2/

+0

我已經實現了一個修改後的下拉控件,例如您建議的控件(儘管不是填充的功能)。 Select2看起來像一個很好的控件,但我目前的主要目標是緩存本地客戶端上的數據集。 – defect833

+0

好的@ defect833,如果這就是你想要的方式。您需要將加載選項的邏輯移出Web表單頁面並加載到服務上。在visual studio中創建一個新的DropDowns.ashx,它返回JSON中的選項。然後,您需要在頁面上將客戶端JavaScript編寫爲ajax(加載)DrowDowns.ashx服務中的選項。然後,您需要設置元緩存標頭以讓瀏覽器緩存.ashx文件,而且您根本不必擔心本地存儲。 – jennas

1

我曾參與編寫一對夫婦,其中數據推來回定期的應用程序,我們建立了一個API對象在Javascript處理數據從請求的服務器被拉出。

API模塊請求數據並根據其成功狀態採取行動。如果您覺得可能需要擴展稍後返回的數據類型,或者只需構建一個AJAX調用來爲下拉列表提取數據,則可以構建一個簡單的API模塊以供使用。

API接口的一個例子是這樣:

/** 
* Parameter 1, string - Command Name for the server to interpret 
* Parameter 2, object - Data that should be passed to the server (if necessary) 
* Parameter 3, string - the HTTP method to use: 'GET', 'POST', 'PUT' etc. 
* Parameter 4, function - the callback to fire once the response is received. 
**/ 
api('CommandName', { key: 'value' }, 'METHOD', function(response) { 
    if(response.success) { 
     //Store data in localStorage here 
    } 
}); 

與上面的規定,您被多次使用在整個網站上的頁面數據。因此,在JavaScript中,您將編寫一個負載檢查來確定數據是否已存儲在localStorage中,並且如果不調用API來填充它。這將確保客戶始終擁有可用的數據。這可以這樣做:

//On Load 
if(!localStorage.dropdown) { 
    api('CommandName', { key: 'value' }, 'METHOD', function(response) { 
     if(response.success) { 
      localStorage.dropdown = response.data; 
     } 
    }); 
}