2

我正在使用C#实体框架编写一个 ASP.NET 网站。

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

我遇到的问题是,每当我尝试获取存储在Button_Click事件内部会话中的信息时,似乎都无法获取信息。我不知道这是否被允许。但是,我还将包含用户信息的登录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;
}
}

我将非常感谢您的帮助。

4

1 回答 1

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;
    }
}

或者

protected void Page_Load(object sender, EventArgs e)
{
  if(!IsPostBack)
   {
     string[] Roles;
     ....
     CasOut.Text = User.NetID;
    }
}
于 2012-12-05T06:44:57.737 回答