2

「edmx」ページには、クリック用のイベント「NextButton_Click」を持つボタンコントロールがあります。このボタンをクリックすると、変数「インデックス」は「40」に変更されず、「テキスト」変数は「アクティブ」に変更されません。これらの変数は常に同じ状態で、"text" は常に "start" に等しく、"index" は常に "10" に等しくなります。クリックボタンイベントメソッドで書いたように、なぜ彼らは (index = 40; text = "active";) で変更したくないのですか?

public partial class CountriesTowns : System.Web.UI.Page
{
    int index = 10;
    string text = "start";

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            index = 20;
            text = "stop";
        }
    }

    //click next button
    protected void NextButton_Click(object sender, EventArgs e)
    {   
        Response.Write(index);
        Response.Write(text);
        index = 40;
        text = "active";
    }
4

3 に答える 3

3

HTTP はステートレスです。 indexorのようなすべてのオブジェクトtext(さらにはすべてのコントロール) は、ページのライフサイクルの最後に破棄されます。そのため、常にデフォルト値で初期化されます。

int index = 10;
string text = "start";

コントロール (fe aTextBoxまたは a HiddenField) を使用して、ポストバック全体で値を保持できます。

ただし、他のオプションがあります。

ASP.NET アプリケーションで永続的なユーザー状態を管理するための 9 つのオプション

于 2013-02-05T16:06:46.870 に答える
2

indexポストバック間で変数と変数の更新された状態を保持していませんtext。そのため、CountriesTownsリクエストごとにの新しいインスタンスが作成されるため、値はデフォルト値に再初期化されます。

于 2013-02-05T16:06:21.533 に答える
1

ボタンをクリックするたびに、ポストバックと呼ばれるものが発生します。ポストバックはクリックコードを実行するだけでなく、ページ全体を再構築します。これを行うために、Pageクラスの新しいインスタンスが作成され、新しいページのhtmlが完成するとすぐに破棄されます。HTMLがレンダリングされるとすぐに、Pageクラスの元のインスタンスも破棄されるため、これを行う必要があります。

于 2013-02-05T16:07:25.893 に答える