繁体   English   中英

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

[英]ASP.NET: Static dictionary empty after 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)
    {
        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);
    ...
}

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

    ...
}

在Response.Redirect之前,该词典仍然包含在LogIn方法中添加的元素,但是在Index.aspx Page_Load代码中,该元素为空。 如果有人有想法,请放心,我一定犯了一个愚蠢的错误,但无法弄清楚。

谢谢 !

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM