2014-07-21 108 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; 
     } 
    }); 
}