-4

Button1 を繰り返しクリックすると、Literal1 のテキストがインクリメントされません。理由を教えてください。

予想: ボタンがクリックされるたびに、テキスト フィールドの値が増分されます。

現在の結果: 値は常に 1 を示します。

public partial class d1 : System.Web.UI.Page
{
int c;
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        c = 1;
        Literal1.Text = c.ToString();
    }
}
protected void Button1_Click(object sender, EventArgs e)
{
    c=c+1;
    Literal1.Text = c.ToString();
}
}
4

1 に答える 1

1

その理由は、それcがそのクラスのインスタンス変数だからです。そして、サーバーへのポストバックごとに、クラスの新しいインスタンスが作成されます。そのため、ポストバックごとcに初期化されています。0そのクラスの単一のインスタンスの外部で永続化する場合cは、それをどこかに保存する必要があります。セッション、アプリケーション、データベースなど (具体的には、 の値がどのような状況で保持されるかによって異なりますc。これは、機能の感触をつかむための単なるテスト コードだと思います。したがって、上記のすべてを試してみてください。どのように異なるか。)

詳細については、ASP.NET Page Life Cycleを参照しください。

c本質的に、「グローバル」は、変数として正確に表すことはできません。そのスコープは、そのクラスのみに非常に限定されており、より具体的には、そのクラスの任意の 1 つのインスタンスのみに限定されています。

于 2013-09-25T16:51:18.330 に答える