1

みんな。教科書に書かれていることを正確に守ろうとしてきましたが、役に立ちませんでした。さて、私の問題は、現在、各ページがアクセスされた回数を追跡するためにページカウンターを作成し、各値を新しいページに表示しようとしていることです。

すべてのページで同じ C# カウンター コードを次に示します。

int sessionCount = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["CountMain"] == null)
            sessionCount = 0;
        else
            sessionCount = Convert.ToInt32(Session["CountMain"]);
        sessionCount++;
    }
    protected void Page_PreRender(object sender, EventArgs e)
    {
        Session["CountMain"] = sessionCount;
    }

prerender は、インターネットや教科書で調べた後に自分で追加したものです。運がない。

カウンター ページの C# コードは次のとおりです。

public partial class Counter : System.Web.UI.Page
{
    int sessionCount = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
        string sessionMain = Session["CountMain"].ToString();
        string sessionComment = Session["CountComment"].ToString();
        string sessionCompleted = Session["CountCompleted"].ToString();
        string sessionCurrent = Session["CountCurrent"].ToString();
        string sessionAbout = Session["CountAbout"].ToString();
        string sessionContact = Session["CountContact"].ToString();
        string sessionCounter = Session["CountCounter"].ToString();

        if (Session["CountCounter"] == null)
            sessionCount = 0;
        else
            sessionCount = Convert.ToInt32(Session["CountCounter"]);
        sessionCount++;

        lblAboutCount.Text = sessionAbout;
        lblCommentCount.Text = sessionComment;
        lblCompletedCount.Text = sessionCompleted;
        lblContactCount.Text = sessionContact;
        lblCounterCount.Text = sessionCounter;
        lblCurrentCount.Text = sessionCurrent;
        lblMainCount.Text = sessionMain;
    }

実行しようとすると、「NullReferenceException was unhandled by user code, Object reference not set to an object of an object.」というメッセージが表示されます。エラー。

前もって感謝します。

編集#1

わかりました、Hexxangonal のおかげで、カウンターが機能するようになりました。しかし、私のカウンターページは現在2回カウントしています。(ロードするたびに 2 ずつ増加)

public partial class Counter : System.Web.UI.Page
{
    int sessionCount = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["CountCounter"] == null)
        {
            sessionCount = 0;
            Session["CountCounter"] = sessionCount;
        }
        else
        {
            sessionCount = Convert.ToInt32(Session["CountCounter"]);
            sessionCount++;
            Session["CountCounter"] = sessionCount;
        }

        Session["CountCounter"] = sessionCount;

        lblAboutCount.Text = Convert.ToString(Session["CountAbout"]);
        lblCommentCount.Text = Convert.ToString(Session["CountComment"]);
        lblCompletedCount.Text = Convert.ToString(Session["CountCompleted"]);
        lblContactCount.Text = Convert.ToString(Session["CountContact"]);
        lblCounterCount.Text = Convert.ToString(Session["CountCounter"]);
        lblCurrentCount.Text = Convert.ToString(Session["CountCurrent"]);
        lblMainCount.Text = Convert.ToString(Session["CountMain"]);
    }
4

2 に答える 2

2

NullReference 例外は、存在しない (null である) ため、おそらくSession["CountXXXXX"].ToString() 行の 1 つから発生しています (CountXXXXX は のようなカウント オブジェクトの 1 つです)。CountMainSession["CountXXXXX"]

実際にそのページを次のロジックに単純化すると、null が文字列変数に割り当てられるだけなので、問題を回避できます。

public partial class Counter : System.Web.UI.Page
{
    int sessionCount = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["CountCounter"] == null)
            sessionCount = 0;
        else
            sessionCount = Convert.ToInt32(Session["CountCounter"]);
        sessionCount++;

        // **NEW** Save the new count value
        Session["CountCounter"] = sessionCount;

        lblAboutCount.Text = Session["CountAbout"];
        lblCommentCount.Text = Session["CountComment"];
        lblCompletedCount.Text = Session["CountCompleted"];
        lblContactCount.Text = Session["CountContact"];
        lblCounterCount.Text = sessionCounter;
        lblCurrentCount.Text = Session["CountCurrent"];
        lblMainCount.Text = Session["CountMain"];
    }

sessionCountまた、整数と文字列をメンバー変数とローカル変数の変数と (それぞれ)混合していたという問題もありました。私はこれをきれいにしました。

于 2013-02-04T04:33:53.397 に答える
2

問題はこれらの2行にあります

   if (Session["CountCounter"] == null)
        sessionCount = 0;
    else
        sessionCount = Convert.ToInt32(Session["CountCounter"]);
    sessionCount++;

これらの値をセッション変数に戻していません。
次のようにする必要があります:-

    if (Session["CountCounter"] == null)
    {
        sessionCount = 0;
        Session["CountCounter"]=sessionCount;
    }
    else
    {
        sessionCount = Convert.ToInt32(Session["CountCounter"]);
        sessionCount++;
        Session["CountCounter"]=sessionCount;
     }
于 2013-02-04T04:35:56.623 に答える