【问题标题】:Sessions not persisting?会话不持久?
【发布时间】:2012-11-20 12:51:44
【问题描述】:

我已经束手无策了。我的代码没有跟踪 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?

帮助?

【问题讨论】:

  • 您为initial.aspx.cs 粘贴的代码是否出现在Page_Load 中?
  • 对不起,它不叫initial.aspx.cs,它是Default.aspx.cs......那代码在button_Click()方法中

标签: c# session user-controls


【解决方案1】:

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

【讨论】:

  • 哦,这是一个有趣的理论。不过,我仍然不能在我的用户控件中使用局部变量,那么我该如何传递这些数据呢?
  • 好的,通过添加 Response.Redirect("this url"); 修复它重新加载页面和会话信息棒!谢谢,cookingwithrye,你明白了!
【解决方案2】:

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

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

【讨论】:

  • 非常感谢您的帮助。我实际上将一个对象传递给会话,但我将其更改为静态字符串以进行测试,希望这会简化事情。唉,标签一直显示 50。为什么不显示 45?
  • 呃,我的意思不是关键字“静态”,而更像是“与动态相反”
猜你喜欢
  • 2012-03-17
  • 2014-09-08
  • 1970-01-01
  • 2016-11-15
  • 2013-09-13
  • 2012-11-05
  • 2016-08-10
  • 1970-01-01
相关资源
最近更新 更多