C#:将代码从Session更改为ViewState导致页面刷新

时间:2015-07-08 20:05:25

标签: c# asp.net session viewstate page-lifecycle

我有一个包含一些UserControls的页面。这些UC有一些可见或不可见的内容,具体取决于您点击的位置。 此页面使用Sessions来保留数据库中的数据,如下所示:

private ViewPersonCollection collection
    {
        get
        {
            if (Session["ViewPersonCollection.test1"] == null)
                Session["ViewPersonCollection.test1"] = new ViewPersonCollection ();
            return (ViewPersonCollection )Session["ViewPersonCollection.test1"];
        }
        set { Session["ViewPersonCollection.test1"] = value; }
    }

由于我在客户端在同一浏览器上使用不同选项卡时遇到了一些会话问题,我将其更改为查看状态,如下所示:

private ViewPersonCollection collection
    {
        get
        {
            if (ViewState["ViewPersonCollection.test1"] == null)
                ViewState["ViewPersonCollection.test1"] = new ViewPersonCollection ();
            return (ViewPersonCollection )ViewState["ViewPersonCollection.test1"];
        }
        set { ViewState["ViewPersonCollection.test1"] = value; }
    }

但在此更改后,我的页面停止加载UserControls。如果我单击按钮,页面将重新加载。我调试它并且代码运行正常,但由于某种原因主页面正在重新加载。

可以做什么?

1 个答案:

答案 0 :(得分:0)

每个用户控件都使用自己的ViewState,稍后将与ViewState页面合并。无论如何,ViewState不是大对象的好选择。

您可以尝试使用this.Context.Item集合,它将在您的用户控件和您的页面之间共享,但它只会将信息保存在同一个HTTP请求中。