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代码中,它是空的。如果有人有想法,请放心,我一定犯了一个愚蠢的错误,但却想不通。
谢谢!
Flash_Back,请记住web是无状态的。这意味着您的词典正在服务器上的内存中创建。当你重定向到一个新页面时,你的上下文是一个新请求的上下文,所以字典就不见了。在新页面的page_load事件期间,您唯一可以访问的内容是您在page_lead期间创建的内容,或者存储在Session或状态数据库中的内容。如果是特定于单个用户的信息,请使用会话。如果它是要由应用程序的所有用户共享的东西(看起来就像你的字典是应该共享的),你需要将数据持久化,可能是在数据库中。
我是在单个web服务器场景的背景下回答的。当您的应用程序跨越多个web服务器时,会话将成为解决此问题的糟糕方案。在这种情况下,请使用数据库。