2012-02-14 14 views
1

次のコードでは、ボタンのクリックイベントを処理します。ユーザーが最初にクリックすると、lableが「最初の時間」に設定され、ユーザーが2回目にクリックすると、lableが「2番目の時間」として設定されます。しかし、正常に動作しません。最初にそれをクリックすると、lableが「最初の時間」に設定されますが、それは正しいですが、2回目をクリックすると何も起こりません。ボタンのクリックイベントが正しく機能しない

マイコード:

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

Web開発タグはこのASP.NETですか? – RvdK

答えて

8

counterのようなインスタンスフィールドの値は、ポストバックには保存されません。 counterViewStateSession、またはその他の永続的なストアのいずれかに格納する必要があります。例えば:

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

そしてbtnCompTagUpdate_Clickにおけるthis.Counter代わりにcounterを参照。

+0

あなたのお手伝いをいただきありがとうございます。ちょうどGetValueOrDefault()メソッドは何ですか?それは何ですか? – Sas

+1

'(int?)this.ViewState [" Counter "]'は、値がヌル( 'Counter'が設定されていない場合)または整数である' Nullable 'に評価されます。 'Nullable .GetValueOrDefault()'メソッドは、値がnullの場合は0を返します。さもなければ、整数だけを返します。 –

+0

気高い、本当に良い説明。それは本当に私の心をきれいにしました。 – Sas

6

"Coutner"がリストの方法で正確に初期化されている場合は、それが問題です。 Coutnerはすべてのポストバックの後にゼロに再初期化されます。あなたは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; 
    } 

} 
関連する問題