0

ページの状態を維持するのに問題があります。ビューステートはデフォルトで有効になっていますが、ボタンをクリックするたびにフォームがリセットされます。これは私が持っているコードです

 protected void Page_Load(object sender, EventArgs e)
    {


        Levels loadGame = new Levels(currentGame);

        int [] gameNums =  loadGame.getLevelNums();
        int inc = 1;
        foreach(int i in gameNums){

            if (i != 0)
            {
                TextBox tb = (TextBox)FindControl("TextBox" + inc);
                tb.Text = i.ToString();
                tb.Enabled = false;
            }
            else {
                //leave blank and move to next box
            }

            inc++;
        }

これが初期負荷です

protected void NormalButton_Click(object sender, EventArgs e)
    {

        clearBoxes();//clear boxes first
        setCurrentGame("normal");//setting to normal returns normal answers
         Levels loadGame = new Levels(returnCurrentGame());

        int[] gameNums = loadGame.getLevelNums();
        int inc = 1;
        foreach (int i in gameNums)
        {

            if (i != 0)
            {
                TextBox tb = (TextBox)FindControl("TextBox" + inc);
                tb.Text = i.ToString();
                tb.Enabled = false;
            }
            else
            {
                //leave blank and move to next box
            }

            inc++;
        }

    }

このボタンをクリックすると、別のボックスの番号が変わります。

 protected void Button1_Click(object sender, EventArgs e)
    {

    }

次に、この空のボタンがありますが、クリックするたびに、まだ何も実行するように設定していなくても、フォームがリセットされます。ボックスを同じままにし、オブジェクトを存続させたいと思います。何が欠けているのかわかりませんが、正しい方向に向けてください。前もって感謝します

4

1 に答える 1

2

Page_Load イベントは、イベント駆動型のポストバック (ボタンのクリックなど) を含め、ページが読み込まれるたびに発生します。

初期化コードが Page_Load にあるように見えるため、ボタンをクリックすると再度実行されます。

次の 2 つのオプションがあります。

  • if ステートメントの FIRST ロードでのみ発生させたいすべてのことを記述します。
  • 初期化を Page_Init に移動します。

最初のオプションのコード サンプル:

 protected void Page_Load(object sender, EventArgs e)
    {
      if(!Page.IsPostBack)  // Teis is the key line for avoiding the problem
      {
        Levels loadGame = new Levels(currentGame);

        int [] gameNums =  loadGame.getLevelNums();
        int inc = 1;
        foreach(int i in gameNums){

            if (i != 0)
            {
                TextBox tb = (TextBox)FindControl("TextBox" + inc);
                tb.Text = i.ToString();
                tb.Enabled = false;
            }
            else {
                //leave blank and move to next box
            }

            inc++;
        }
      }
     }

また、推奨される読書: ASP.NET ページのライフサイクル

于 2013-01-23T22:26:38.823 に答える