2

C#Entity Frameworkを使用して ASP.NET Web サイトをコーディングしています。

作成したLoginクラスをセッションに保存しました。このクラスには、NetID、ユーザーが使用できる役割、ユーザーがログインに選択した役割などの情報が含まれています。

私が遭遇している問題は、Button_Clickイベント内のセッションに保存されている情報を取得しようとするたびに、情報を取得できないように見えることです。これが許可されているかどうかはわかりません。ただし、ユーザー情報を含むLogin変数を、アクセスする部分クラス内の関数のパブリック変数として配置しても、イベント内の情報にアクセスする際に同じ問題が発生しますButton_ClickPage_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ボタンを押すたびにコードが実行され、その場合 value のQueryString値が消去されます。

page_load 内のコードがページ ポストバック (を使用IsPostBack) ごとに 1 回実行されるようにするか、次のようにします。

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 に答える