[英]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.