2013-02-04 3 views
1

모두. 나는 교과서에서 말하는대로 정확하게 따라하려고 노력했지만 아무 소용이 없습니다. 지금, 제 문제는 각 페이지에 액세스 한 횟수를 추적하여 새 페이지에 각 값을 표시하는 페이지 카운터를 만들고자하는 중입니다.페이지 카운터가 작동하지 않습니다 ASP.NET 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; 
    } 

사전 렌더링은 내가 인터넷에 대한 연구 후 자신에 추가 뭔가, 그리고 교과서에서 :

여기에 모든 페이지에 대해 동일하다 C# 카운터 코드입니다. 불운. 여기

은 카운터 페이지 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이 사용자 코드에 의해 처리되지 않은이었다 개체 참조가 개체의 인스턴스로 설정되지 않았습니다." 오류.

미리 감사드립니다.

1

좋아 EDIT 번호, Hexxangonal 덕분에, 카운터는 지금 노력하고 있습니다. 그러나 나의 카운터 페이지는 이제 2 번까지 스스로 계산합니다. Session["CountXXXXX"]이 존재하지 않기 때문에 NullReference 예외가 아마 (CountXXXXX이 CountMain처럼 카운트 개체 중 하나입니다) 당신의 Session["CountXXXXX"].ToString() 라인 중 하나에서 오는

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"]); 
    } 
+1

어떤 라인이 문제가됩니까? 어떤 대상을 기대합니까? 어디에서 물려 받습니까? – TankorSmash

+0

아, 저를 상기시켜 줘서 고마워요. lblAboutCount.Text = sessionAbout; 은 예외가 발생하는 곳입니다. 세션 [ "Count ???"]을 카운터 페이지의 값으로 전달하려고합니다. –

답변

2

(2가로드 할 때마다 증가) (널 (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 변수로 정수와 문자열을 혼합 한 문제가 있었다. 나는 이것을 청소했다.

+0

내가 한 발을 내자. –

+0

아, 그 sessionCount 값도 복원하지 못했습니다! – scottheckel

+0

나는 PreRender 메서드가 필요하지 않다고 가정 할 것인가? –

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

나는 귀하의 솔루션을 사용하고 필요에 따라 질문을 업데이트했습니다. –

+0

@RionMurphMurphy하지만 개별 사용자 또는 모든 사용자에 대해 계산합니다. –

+0

페이지를 방문한 횟수만으로 모든 사용자를 추측 할 수 있습니다. –

관련 문제