Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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
C# ASP.NET:响应后静态字典为空。重定向_C#_Asp.net_Dictionary_Response.redirect - Fatal编程技术网

C# ASP.NET:响应后静态字典为空。重定向

C# ASP.NET:响应后静态字典为空。重定向,c#,asp.net,dictionary,response.redirect,C#,Asp.net,Dictionary,Response.redirect,我面临一个关于静态字典的问题,它似乎被“response.redirect”命令清空了 以下是主页的代码: public partial class Accueil : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { ... } protected void _Connect_Click(object sender, EventArgs e) {

我面临一个关于静态字典的问题,它似乎被“response.redirect”命令清空了

以下是主页的代码:

public partial class Accueil : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    { ... }

    protected void _Connect_Click(object sender, EventArgs e)
    {
        PlayerDao.LogIn(_Pseudo.Text, _Password.Text, HttpContext.Current.Session.SessionID);
        Response.Redirect("~/Game/Index.aspx", true);
    }
}
登录方法摘录:

public static void LogIn(string pseudo, string password, string sessionId)
{
    ...
    Player.Dict.Add(sessionId, player);
    ...
}
还有播放器。Dict字典:

public class Player
{
    private static Dictionary<string, Player> dict = new Dictionary<string, Player>();
    public static Dictionary<string, Player> Dict
    {
        get { return dict; }
        set { dict= value; }
    }

    ...
}
公共类播放器
{
私有静态字典dict=新字典();
公共静态字典Dict
{
获取{return dict;}
设置{dict=value;}
}
...
}
就在Response.Redirect之前,字典仍然包含登录方法中添加的元素,但在Index.aspx Page_Load代码中,它是空的。 如果有人有想法,请放心,我一定是犯了一个愚蠢的错误,但我想不出来


谢谢

回想一下,记住网络是无状态的。这意味着您的字典正在服务器上的内存中创建。当您重定向到一个新页面时,您的上下文就是一个新请求的上下文,因此字典就不存在了。在新页面的page_load事件期间,您可以访问的唯一内容是您在page_load期间创建的内容,或者存储在会话或状态数据库中的内容。如果是特定于单个用户的信息,请使用会话。如果应用程序的所有用户都要共享这些数据(就像您的字典所要的那样),那么您需要将这些数据持久化,可能是在数据库中


我是在单个web服务器场景的上下文中回答这个问题的。当您的应用程序跨越多个web服务器时,会话将成为解决此问题的糟糕方法。在这种情况下,请使用数据库。

闪回,请记住web是无状态的。这意味着您的字典正在服务器上的内存中创建。当您重定向到一个新页面时,您的上下文就是一个新请求的上下文,因此字典就不存在了。在新页面的page_load事件期间,您可以访问的唯一内容是您在page_load期间创建的内容,或者存储在会话或状态数据库中的内容。如果是特定于单个用户的信息,请使用会话。如果应用程序的所有用户都要共享这些数据(就像您的字典所要的那样),那么您需要将这些数据持久化,可能是在数据库中


我是在单个web服务器场景的上下文中回答这个问题的。当您的应用程序跨越多个web服务器时,会话将成为解决此问题的糟糕方法。在这种情况下,请使用数据库。

闪回,请记住web是无状态的。这意味着您的字典正在服务器上的内存中创建。当您重定向到一个新页面时,您的上下文就是一个新请求的上下文,因此字典就不存在了。在新页面的page_load事件期间,您可以访问的唯一内容是您在page_load期间创建的内容,或者存储在会话或状态数据库中的内容。如果是特定于单个用户的信息,请使用会话。如果应用程序的所有用户都要共享这些数据(就像您的字典所要的那样),那么您需要将这些数据持久化,可能是在数据库中


我是在单个web服务器场景的上下文中回答这个问题的。当您的应用程序跨越多个web服务器时,会话将成为解决此问题的糟糕方法。在这种情况下,请使用数据库。

闪回,请记住web是无状态的。这意味着您的字典正在服务器上的内存中创建。当您重定向到一个新页面时,您的上下文就是一个新请求的上下文,因此字典就不存在了。在新页面的page_load事件期间,您可以访问的唯一内容是您在page_load期间创建的内容,或者存储在会话或状态数据库中的内容。如果是特定于单个用户的信息,请使用会话。如果应用程序的所有用户都要共享这些数据(就像您的字典所要的那样),那么您需要将这些数据持久化,可能是在数据库中


我是在单个web服务器场景的上下文中回答这个问题的。当您的应用程序跨越多个web服务器时,会话将成为解决此问题的糟糕方法。在这种情况下,请使用数据库。

这难道不是HTTP协议的工作原理吗?不太熟悉ASP.NET,但除非您在应用服务器上运行,否则在跳转页面后,内存中的任何数据都会丢失。@RoyalBg是的,不管ASP.NET如何,这就是它的工作方式。OP需要某种持久性,比如会话(如果是用户的话)或数据库(如果是全局的话)。HTTP协议不是这样工作的吗?不太熟悉ASP.NET,但除非您在应用服务器上运行,否则在跳转页面后,内存中的任何数据都会丢失。@RoyalBg是的,不管ASP.NET如何,这就是它的工作方式。OP需要某种持久性,比如会话(如果是用户的话)或数据库(如果是全局的话)。HTTP协议不是这样工作的吗?不太熟悉ASP.NET,但除非您在应用服务器上运行,否则在跳转页面后,内存中的任何数据都会丢失。@RoyalBg是的,不管ASP.NET如何,这就是它的工作方式。OP需要某种持久性,比如会话(如果是用户的话)或数据库(如果是全局的话)。HTTP协议不是这样工作的吗?不太熟悉ASP.NET,但除非您在应用服务器上运行,否则在跳转页面后,内存中的任何数据都会丢失。@RoyalBg是的,不管ASP.NET如何,这就是它的工作方式。OP需要某种持久性,例如会话(如果是针对用户的)或数据库(如果是全局的)。非常感谢您的回答!我是个新手,但我想实现的是以某种方式存储用户会话,以便使用sessionId从数据库中获取player对象。既然静态字典似乎不可能做到这一点,那么它是否应该存储在数据库中,存储在一个可以关联用户id和会话id的表中?对于您正在做的事情,我会说是的,一个数据库表