2012-02-14 2 views
1

다음 코드는 버튼 클릭 이벤트를 처리합니다. 사용자가 처음 클릭 할 때 lable을 "처음"으로 설정하고, 사용자가 두 번 클릭하면 lable을 "Second Time"으로 설정합니다. 하지만 제대로 작동하지 않습니다. 처음 클릭하면 lable이 "처음"으로 설정됩니다. 그러나 두 번 클릭하면 아무 일도 일어나지 않습니다.버튼 클릭 이벤트가 제대로 작동하지 않습니다.

내 코드 :

내가 그것을 어떻게

int counter=0;  
protected void btnCompTagUpdate_Click(object sender, EventArgs e) 
{ 

    if (counter == 0) 
    { 
     lable1.Text="First Time"; 
     counter++; 
    } 
    else if (counter == 1) 
    { 
     lable1.Text="Second Time"; 
     counter--; 
    } 

    } 
을 를 해결할 수 ?

+2

철자가 틀린 카운터 : Coutner;) – RvdK

+0

이 ASP.net입니까? – ken2k

+0

웹 개발 태그로 인해 ASP.NET이 필요합니까? – RvdK

답변

8

counter과 같은 인스턴스 필드 값은 포스트 백간에 저장되지 않습니다. counterViewState, Session 또는 다른 영구 저장소 중 더 적합한 것으로 저장해야합니다. 예를 들면 :는

private int Counter 
{ 
    get { return ((int?)this.ViewState["Counter"]).GetValueOrDefault(); } 
    set { this.ViewState["Counter"] = value; } 
} 

이어서 btnCompTagUpdate_Clickthis.Counter 대신 counter 참조.

+0

도움 주셔서 감사합니다. 그냥 GetValueOrDefault() 메서드가 궁금? 그것은 무엇입니까? – Sas

+1

'(int?) this.ViewState [ "Counter"]'는 (Nullable )의 값이 null이거나 (Counter가 설정되지 않은 경우) 정수인지 아니면 정수인지 평가합니다. 'Nullable .GetValueOrDefault()'메서드는 값이 null이면 0을 반환하고, 그렇지 않으면 0을 반환합니다. 그렇지 않으면 그냥 정수를 반환합니다. –

+0

고맙습니다. 정말 좋은 설명입니다. 그것은 정말로 내 마음을 맑게했습니다. – Sas

6

"Coutner"가 나열된 방식으로 정확히 초기화되면 문제가 발생합니다. Coutner는 모든 포스트 백 이후에 0으로 다시 초기화됩니다. Coutner의 상태를 저장해야합니다. 가장 간단한 경우를 제외하고는 일반적으로 추천합니다.하지만 ViewState을 사용하는 경우에 유효하다고 생각합니다.

-4

메서드에서 카운터를 높이는 방법 만 변경하면됩니다. 버튼 클릭 후 새 변수로 다시 저장하지 않습니다.

int counter = 0;  
protected void btnCompTagUpdate_Click(object sender, EventArgs e) {  
if (counter == 0)  { 
counter = counter + 1;   
label1.Text="First Time";    
}  
else if (counter == 1) {   
counter = counter - 1;   
label1.Text="Second Time"; 
}  
} 
+0

왜 downvote ...이 작품 :) – sealz

+0

Int.equals는 정수와 동일합니다. x ++ 및 x = x + 1에 대해서도 동일합니다. –

+0

트롤이 실제로 좋은 코드라고 믿는 지 알 수 없습니다. – Randolpho

1
void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    Session["counter"]=0; 
} 

당신은, 한 번 할 때 첫 번째 페이지가로드 카운터 값을 설정합니다.

protected void btnCompTagUpdate_Click(object sender, EventArgs e) 
{ 
int counter=0; 
if (Session["counter"]!=null) 
counter= Convert.ToInt32(Session["counter"]); 
    if (counter == 0) 
    { 
    lable1.Text="First Time"; 
    counter++; 
    Session["counter"]=counter; 
    } 
else if (counter == 1) 
    { 
    lable1.Text="Second Time"; 
    counter--; 
    Session["counter"]=counter; 
    } 

} 
관련 문제