当Button_Click事件触发asp.net C#时,会话似乎丢失了

时间:2012-12-05 06:34:29

标签: asp.net events session click

我正在使用 C#实体框架对ASP.NET网站进行编码。

我在会话中存储了我创建的 Login 类。该类包含诸如NetID,用户可用的角色以及用户选择登录的角色等信息。

我遇到的问题是,每当我尝试获取存储在Button_Click事件内的会话中的信息时,它似乎都无法获取信息。我不知道这是否允许。但是,我还将包含用户信息的 Login 变量作为公共变量,用于访问部分类中的任何函数,并且在访问Button_Click事件中的信息时仍然遇到同样的问题。当我在Page_Load事件中获取会话信息时,我能够获得放置在该会话中的值。

以下是我的程序代码。

public partial class Private_HomePagePortal : System.Web.UI.Page
{

Login SysUser = new Login();

protected void Page_Load(object sender, EventArgs e)
{
    string[] Roles;

    SysUser.Ticket = Request.QueryString["casticket"];
    SysUser.GetNetID();

    if (SysUser.Authenticate(SysUser.NetID))
    {

        SysUser.GetRoles(SysUser.NetID);
        Roles = SysUser.Roles;

        CasOut.Text = "Welcome <b>" + SysUser.NetID + "</b>!  You are now Logged in!  " + "Please choose a role you would like to sign in as." + "<br>" + "<br>";

        foreach (string item in Roles)
        {
            if (item == "Admin")
            {
                Admin.Visible = true;
                Admin.CssClass = "btn btn-danger";
                AdminBreak.Text = "<br><br>";
            }
            if (item == "SuperAdmin")
            {
                SuperAdmin.Visible = true;
                SuperAdmin.CssClass = "btn btn-danger";
                SuperAdminBreak.Text = "<br><br>";
            }
            if (item == "Member")
            {
                Member.Visible = true;
                Member.CssClass = "btn btn-danger";
                MemberBreak.Text = "<br><br>";
            }
            if (item == "Convener")
            {
                Convener.Visible = true;
                Convener.CssClass = "btn btn-danger";
                ConvenerBreak.Text = "<br><br>";
            }
            if (item == "ITAdmin")
            {
                ITAdmin.Visible = true;
                ITAdmin.CssClass = "btn btn-danger";
            }
        }
       else
        CasOut.Text = "You are not in the IUCommittee System!!!!  If you believe this is an error, contact the IT Administrator for assistance.";

    Session["Login"] = SysUser;
    Login User = (Login)Session["Login"];                           //Used to test information is actually in the Session
    CasOut.Text = User.NetID;
}

    protected void Admin_Click(object sender, EventArgs e)
{
    Login User = (Login)Session["Login"];
    User.SelectedRole = "Admin";
    CasOut.Text = User.NetID + User.SelectedRole;
    Session["Login"] = User;
}
}

我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

每次按下按钮时都会执行

Page_Load代码,在这种情况下,QueryString值的值将被删除。

确保page_load中的代码每页回发执行一次(使用IsPostBack)或类似:

protected void Page_Load(object sender, EventArgs e)
{
  if(Session["Login"]==null)
   {
     string[] Roles;
     ....
     CasOut.Text = User.NetID;
    }
}

OR

protected void Page_Load(object sender, EventArgs e)
{
  if(!IsPostBack)
   {
     string[] Roles;
     ....
     CasOut.Text = User.NetID;
    }
}