会话没有坚持?

时间:2012-12-03 03:31:15

标签: c# session user-controls

我的智慧结束了。我的代码没有跟踪C#中的会话

我正在使用一个用户控件来获取会话数据,但事实并非如此。

这是用户控件:

[Serializable]
public partial class studentComments : System.Web.UI.UserControl
{

    protected void Page_Load(object sender, EventArgs e)
    {
        string currStud;
        if (Session["CS"] == null)
        {
            currStud = "50";
        }
        else
        {
            currStud = (string)Session["CS"];
        }

        lblHeader.Text = "Comments for Student " + currStud;

        //display(currStud);
    }
}

这是初始aspx.cs页面中的代码

try
{
    student temp = studList.Find(o => o.student_id == studID);

    Session["CS"] = "45";
    PnlComment.Visible = true;
}
catch (NullReferenceException nre)
{
    lblTest.Text = "Student does not exist!";
}

显然,用户控件位于PnlComment控件中。

修改的  我实际上有一个对象传递给会话但我将其更改为静态字符串用于测试目的,希望这会简化事情。唉,标签一直显示50.为什么不显示45?

帮助?

2 个答案:

答案 0 :(得分:0)

这不是一个非常普遍的意见,但我总是发现ASP的会话管理规则有点反直觉所以我倾向于完全避免使用它们。另外,我不喜欢在整个程序中使用字符串作为标识符,因为它可能导致冲突和其他类型的运行时错误。

坚持使用cookie来保存您自己的数据库中的会话标识符,并将其序列化/反序列化为具有属性和字段的对象。它的重构更具弹性,如果出现问题,调试起来会容易得多。

答案 1 :(得分:0)

您的default.aspx.cs page_load事件在用户控制page_load事件后触发,因此在页面加载后会话值可能为“45”时,标题文本值将显示旧值“50”,因为它是在那之前设定的。