Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在不复制数据的情况下在站点中的页面之间共享静态数据?_Javascript_Html_Asp.net Mvc - Fatal编程技术网

Javascript 如何在不复制数据的情况下在站点中的页面之间共享静态数据?

Javascript 如何在不复制数据的情况下在站点中的页面之间共享静态数据?,javascript,html,asp.net-mvc,Javascript,Html,Asp.net Mvc,我有一个数据列表,比如“支持的颜色”。可能这些颜色都有一个名称、一组别名和一些表示该颜色的特定RGB值。在我的网站上,我有一个页面,我想在下拉列表中列出颜色。在另一个页面中,我希望有一个网格显示每种颜色。也许在另一个页面,完全不同的东西。因此,我的问题是:如何在页面之间共享数据,以便在定义数据的某个位置的更改将传播到站点中的所有页面 环境:这是一个MVC应用程序,使用Razor(很少使用)、bootstrap进行表示,并使用JQuery进行一些交互操作 我对解决方案的想法: 1) 将此列表存储在

我有一个数据列表,比如“支持的颜色”。可能这些颜色都有一个名称、一组别名和一些表示该颜色的特定RGB值。在我的网站上,我有一个页面,我想在下拉列表中列出颜色。在另一个页面中,我希望有一个网格显示每种颜色。也许在另一个页面,完全不同的东西。因此,我的问题是:如何在页面之间共享数据,以便在定义数据的某个位置的更改将传播到站点中的所有页面

环境:这是一个MVC应用程序,使用Razor(很少使用)、bootstrap进行表示,并使用JQuery进行一些交互操作

我对解决方案的想法:

1) 将此列表存储在传递给所有页面的模型中。然后,无论何时需要数据,我都可以循环模型中的项目,并以我想要的方式呈现它们

2) 将列表存储在javascript中,并使用javascript生成HTML

3) 使用JQuery从服务器获取列表,并迭代结果以生成适当的HTML


请注意,我对web开发非常陌生,因此上面可能有一些错误的假设,最明显的是一些考虑不周的想法-任何更正都非常感谢

尝试在用户会话中存储数据。然后,当用户更改页面时,它将始终可用


我建议使用HTML5本地存储。它是非常快速,易于使用

您可以在JS中为颜色创建对象构造函数,如下所示:

function Color (name, alias, rgbCode) {
    this.name = name;
    this.alias = alias;
    this.rgbCode = rgbCode;
}
var redColor = new Color ("red", "primary", "#FF0000");
无论何时要添加颜色,请按以下方式操作:

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);
}
var local=JSON.parse(localStorage[“colors”]);

对于(i=0;i有多种方法可以处理此问题。一种方法是使用
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);
}
使用System.Runtime.Caching;
公共列表获取颜色()
{
//检查缓存
List colors=Cache.Get(“colors”)作为列表;
如果(颜色==null)
{      
列表颜色=//从数据库获取颜色
Cache.Set(“colors”,colors);//添加到缓存
}
返回颜色;
}
公共静态对象Get(字符串键)
{
返回MemoryCache.Default[key];
}
公共静态无效集(字符串键,对象数据,int duration=60)
{
CacheItemPolicy policy=新的CacheItemPolicy();
policy.AbsoluteExpiration=DateTime.Now+TimeSpan.FromMinutes(持续时间);
添加(新缓存项(键、数据)、策略);
}
公共静态无效无效(字符串键)
{
MemoryCache.Default.Remove(键);
}
然后,在需要属性的每个控制器中,只需调用
FetchColors()
,在任何修改颜色的方法中,调用
Invalidate(“颜色”);
将其从内存中删除,并在下次调用时强制从数据库加载数据


注意,所有这些都假设您没有使用web场。

您正在使用MVC,正如您所说的。您的静态或动态数据是您的“模型”。您的页面是您的“视图”。不要担心Razor、bootstrap、jQuery等。它们可以被替代品替代,但这不会改变应用程序的MVC方面。转到asp.net/MVC,有很多教程。为什么不使用对象数组的JSON字符串作为颜色,并将其属性存储在客户端的本地存储中?对于d,颜色是否不同不同的用户?不,列表将是相同的,无论连接的是谁,何时,等等-它实际上是一个静态列表。这不会增加服务器负载吗?这是真的。另一种选择是将数据存储在数据库中,并在每个页面请求时调用它。除非您使用大量数据,否则对服务器的影响不应该是issue.OP没有说明颜色对于不同的用户是否不同,这是一个必需的信息。对于不同的用户没有不同。我最终采用了模型方法;这对于在会话之间保存用户输入似乎非常有用,因此我可能会将此纳入其中。