我有一个数据列表,说“支持的颜色”。也许这些颜色都有一个名称,一组别名,一些代表这种颜色的特定RGB值。在我的网站中,我有一个页面,我想在下拉列表中列出颜色。在另一个页面中,我想要一个显示每种颜色的网格。也许在另一页,完全不同的东西。所以我的问题是:如何在页面之间共享数据,以便定义数据的一个位置的更改将传播到站点中的所有页面。
环境:这是一个MVC应用程序,使用Razor(节俭),用于演示的引导程序,以及用于某些交互操作的JQuery。
我对解决方案的看法:
1)将此列表存储在传递给所有页面的模型中。然后,只要需要数据,我就可以循环遍历模型中的项目,然后呈现它们,但是我想要
2)将列表存储在javascript中,然后使用javascript生成HTML。
3)使用JQuery从服务器获取列表,并迭代结果以生成相应的HTML
注意我对Web开发很新,所以上面可能会有一些错误的假设,而且大多数都是一些思路不好的想法 - 非常感谢任何更正!
答案 0 :(得分:2)
我建议使用HTML 5本地存储。它非常快速且易于使用。
您可以在JS中为您的颜色创建对象构造函数,如下所示:
function Color (name, alias, rgbCode) {
this.name = name;
this.alias = alias;
this.rgbCode = rgbCode;
}
每当您想要添加颜色时,请执行以下操作:
var redColor = new Color ("red", "primary", "#FF0000");
要存储它们,请在本地存储中创建密钥。
if (localStorage["colors"] === undefined) {
localStorage["colors"] = [ ];
}
现在,您可以在该阵列中推送任何颜色。
var local = JSON.parse(localStorage["colors"]);
local.push(redColor);
localStorage["colors"]=JSON.stringify(local);
要访问颜色,您可以
var local = JSON.parse(localStorage["colors"]);
for(i=0; i<local.length; i++){
console.log("Color Name: " + local[i].name + " Alias: " + local[i].alias + " RGB Code: " + local[i].rgbCode);
}
注意:这一切都是在客户端完成的,因为数据都是静态的。当这样的现代解决方案可用时,增加服务器负载是没有意义的。
希望有所帮助!
答案 1 :(得分:0)
有很多方法可以解决这个问题。一种选择是使用MemoryCache
(System.Runtime.Caching
命名空间)
您可以创建一个检查缓存的方法,如果不存在,则从数据库中获取值并将其添加到缓存中。此方法可以位于单独的存储库类中,也可以位于BaseController
类中。例如
using System.Runtime.Caching;
public List<MyColor> FetchColors()
{
// Check cache
List<MyColor> colors= Cache.Get("Colours") as List<MyColor>;
if (colors== null)
{
List<MyColor> colors = // Fetch colors from database
Cache.Set("Colours", colors); // Add to cache
}
return colors;
}
public static object Get(string key)
{
return MemoryCache.Default[key];
}
public static void Set(string key, object data, int duration = 60)
{
CacheItemPolicy policy = new CacheItemPolicy();
policy.AbsoluteExpiration = DateTime.Now + TimeSpan.FromMinutes(duration);
MemoryCache.Default.Add(new CacheItem(key, data), policy);
}
public static void Invalidate(string key)
{
MemoryCache.Default.Remove(key);
}
然后在你需要属性的每个控制器中只需调用FetchColors()
并在任何修改颜色的方法中,调用Invalidate("Colors");
将其从内存中删除并强制从数据库加载数据在接下来的电话会议上。
请注意,所有这些都假设您没有使用网络农场。
答案 2 :(得分:-1)
尝试将数据存储在用户的会话中。然后,当用户更改页面时,它始终可用。