3

ページの読み込み時に実行されるコードは次のとおりです。

protected void Page_Load(object sender, EventArgs e)
{
    DisableChaching();
    if (Request.Cookies["UserName"] == null)
    {
        if (Session["UserName"] == null)
        {
            Response.Redirect("~/Default.aspx");
        }
        else if (Session["AccessLevel"].ToString().Equals("2"))
        {
            Response.Redirect("~/Default.aspx");
        }
    }
    else if (Session["AccessLevel"].ToString().Equals("2"))
    {
        Response.Redirect("~/Default.aspx");
    }
    if (!IsPostBack)
    {
        LoadControls();
        BindGrid();
    }
}

一部のデータをデータベースに保存しようとしてエラーが発生した場合、保存ボタンをクリックしてデータを再保存しようとすると、次のエラーが発生することがあります。

オブジェクト参照がオブジェクト インスタンスに設定されていません

コードの場合は次の行で:

else if (Session["AccessLevel"].ToString().Equals("2"))

このエラーが発生するのはなぜですか?

ChRがユーザーを記憶するチェックボックスであるログインユーザーコントロールのコードは次のとおりです。

if (ChR.Checked == true)
            {
                Response.Cookies["UserName"].Value = txtUserName.Text.Trim();
                Response.Cookies["UserName"].Expires = DateTime.Now.AddMonths(2);
                Response.Cookies["AccessLevel"].Value = member.AccessLevel.ToString();
                Response.Cookies["AccessLevel"].Expires = DateTime.Now.AddMonths(2);
                Response.Cookies["FirstName"].Value = member.FirstName;
                Response.Cookies["FirstName"].Expires = DateTime.Now.AddMonths(2);
                Response.Cookies["LastName"].Value = member.LastName;
                Response.Cookies["LastName"].Expires = DateTime.Now.AddMonths(2);
                Session["UserName"] = txtUserName.Text.Trim();
                Session["AccessLevel"] = member.AccessLevel.ToString();
                Response.Redirect("~/Default.aspx");
            }
            else
            {
                Session["UserName"] = txtUserName.Text.Trim();
                Session["AccessLevel"] = member.AccessLevel.ToString();
                Session["FirstName"] = member.FirstName;
                Session["LastName"] = member.LastName;
                Response.Redirect("~/Default.aspx");
            }

私のマスターページでは、page_Load イベントでこの方法でセッションに値を割り当てます。

DisableChaching();
    FillInfo();
    if (Request.Cookies["UserName"] != null)
    {
        Session["UserName"] = Request.Cookies["UserName"].Value;
        Session["AccessLevel"] = Request.Cookies["AccessLevel"].Value;
        Session["FirstName"] = Request.Cookies["FirstName"].Value;
        Session["LastName"] = Request.Cookies["LastName"].Value;
        WellCome();
        if (Session["AccessLevel"].ToString() == "1")
        {
            RenderMenu(AcccessLevel.SiteManager);
        }
        else if (Session["AccessLevel"].ToString() == "2")
        {
            RenderMenu(AcccessLevel.Client);
        }
    }
    else if (Session["UserName"] != null)
    {
        WellCome();
        if (Session["AccessLevel"].ToString() == "1")
        {
            RenderMenu(AcccessLevel.SiteManager);
        }
        else if (Session["AccessLevel"].ToString() == "2")
        {
            RenderMenu(AcccessLevel.Client);
        }

    }
    else
    {
        WellGo();
        RenderMenu(AcccessLevel.LogedOutUser);
    }
enter code here
4

4 に答える 4

6

セッションが null になる理由がわかったと思います。本に関する情報を db に保存し、本の画像ファイルを app フォルダーに保存したい場合、ファイルを保存する権限がなく、アプリケーションがエラーをスローし、すべてのセッションが null になります!!!

于 2012-05-04T07:56:46.923 に答える
1

以下のようにコードを置き換えます。

string val = Convert.ToString(Session["AccessLevel"]);
if (val == "2")
{

}

との違いを理解していただければ幸いです==Equals()

public static String AccessLevel {
    get
    {
        return Convert.ToString(HttpContext.Current.Session["AccessLevel"]);
    }
    set
    {
        HttpContext.Current.Session["AccessLevel"] = value;
    }
}
于 2012-05-03T15:51:17.303 に答える
0

このエラーが発生するのはなぜですか?

Session["AccessLevel"]Null であり、Null オブジェクトでメソッドを呼び出そうとしているためです。

于 2012-05-03T15:46:43.920 に答える