ASP.NET:response.redirect之后的静态字典为空

本文关键字:静态 字典 之后 NET response redirect ASP | 更新日期: 2023-09-27 18:28:42

我面临一个关于静态字典的问题,该字典似乎被"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);
    }
}

LogIn方法提取:

public static void LogIn(string pseudo, string password, string sessionId)
{
    ...
    Player.Dict.Add(sessionId, player);
    ...
}

和玩家。字典:

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; }
    }
    ...
}

在Response.RRedirect之前,字典仍然包含在LogIn方法中添加的元素,但在Index.aspx Page_Load代码中,它是空的。如果有人有想法,请放心,我一定犯了一个愚蠢的错误,但却想不通。

谢谢!

ASP.NET:response.redirect之后的静态字典为空

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

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