我可以拥有每个会话的静态属性吗



我有一个分部类作为我的表单的代码隐藏,其中我有

private object x;

我正在尝试在Page_Load 上使用它

protected void Page_Load(object sender, EventArgs e) {
    if (x != null)
        y = x;

第一次它是空的,但通过单击TreeView中的一个元素,我将它设置为某个对象,在那里它不是空的。它显示在表格上。

当我尝试处理web表单中的对象时,表单再次处理Page_Load,而x在那里为空。如何为每个打开的会话保持x静态?

据我所知,请求之间的会话不会保持静态。你可能想在这里使用会话词典。它包含在所有代码隐藏页文件中。

Session["x"] = 10;
// if you want you can do:
// var x = Session["x"];
if (!String.IsNullOrEmpty(Session["x"]))
{
    y = Session["x"];
}

上面的代码没有考虑强制转换x。所以如果y是int,你可以在if块中这样做:

// imagine there's some type safety checks somewhere, yada yada
y = Convert.ToInt32(Session["x"]);

这将为会话的生存期保留变量。为了证明这一点,请尝试同时在两个不同的浏览器中执行此操作。它们都将为x.保留不同的值

希望这能有所帮助。

最新更新