1

我有部分类作为我的表单的代码隐藏

private object x;

我正在尝试在 Page_Load 上使用它

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

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

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

4

1 回答 1

3

据我所知,请求之间的会话不会保留静态。您可能希望在此处使用 Session 字典。这是所有代码隐藏页面文件中都有的东西。

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"]);

这会在会话的整个生命周期内保留变量。为了证明这一点,请尝试同时在 2 个不同的浏览器中执行此操作。他们都会为 x 保留不同的值。

希望这可以帮助。

于 2013-07-09T05:41:47.880 回答