2

以下に示すようにメソッドに値を設定しようとしていますが、btnSaveValue を実行すると取得する値がありません。デフォルトクラスでプライベート int val を作成し、それに値を割り当てようとしたこともありますが、それでも空白の値が返されます - 誰か助けてもらえますか?

ありがとう

 public partial class _Default : System.Web.UI.Page 
{
    valueAllocation valAlloc = new valueAllocation();

    public void declaringValue()
    {
        valAlloc.setValue(5);
        int testAlloc = valAlloc.getValue();
        lblResult.Text="Value set here is:"+testAlloc;  //THIS WORKS!!!
    }
    protected void btnSaveValue_Click(object sender, ImageClickEventArgs e)
    {
        lblResult.Text = "Value now is:" + valAlloc.getValue();   //DOESNT WORK??????!!!!!
    }
}

public class valueAllocation
{
    private int val;

    public void setValue(int value)
    {
        val = value;
    }
    public string getValue()
    {
        return val;
    }

}
4

5 に答える 5

1

これは、たとえば を使用して各投稿に値を保存する必要があるためですViewState

これは、ASP.Net ページのライフサイクルに関連する基本的な問題です。

基本的に、ページをリクエストするたびに、すべての投稿でページの新しいインスタンスが作成され、応答がクライアントに返されると破棄されます

ポストバック間で状態を維持したい場合は、各値を手動で保存する必要がありますViewState

型全体を ViewState に格納する

これがあなたの最善の策だと思います

カスタムタイプ

[Serializable]
public class valueAllocation
{
    public int MyValue { get; set; }
}

コードビハインド

protected valueAllocation MyObject
{
   get
   {
      if(this.ViewState["c"] != null) 
           return (valueAllocation)this.ViewState["c"];

      return null;
  }
  set
  {
      this.ViewState["c"] = value;
  }

public valueAllocation declaringValue()
{
    if (this.MyObject == null)
        this.MyObject = new valueAllocation { MyValue = 5 };

    lblResult.Text="Value set here is:"+ this.MyObject.MyValue.ToString();
    return this.MyObject;
}

protected void btnSaveValue_Click(object sender, ImageClickEventArgs e)
{
    declaringValue()
    lblResult.Text = "Value now is:" + declaringValue().MyValue.ToString();
}
于 2012-07-19T10:05:02.420 に答える
1

問題は、decalringValue() を呼び出したことがないことです。

 public valueAllocation declaringValue()
    {
        valAlloc.setValue(5);
        int testAlloc = valAlloc.getValue();
        lblResult.Text="Value set here is:"+testAlloc;  //THIS WORKS!!!
        return valAlloc;
    }

protected void btnSaveValue_Click(object sender, ImageClickEventArgs e)
    {
        declaringValue()
        lblResult.Text = "Value now is:" + declaringValue().getValue();   //DOESNT WORK??????!!!!!
    }
于 2012-07-19T10:05:12.310 に答える
1

これは、デスクトップではなく Web アプリケーションであるためです。ページの状態を管理する必要があります。Web では、各要求がサーバーにとって新しいためです。

あなたのシナリオでは、ページの状態を維持するために「viewstate」手法を使用する必要があります。

または、その値が失われないようにする場合は、変数を静的にする必要があります。

詳細については、グーグル"State management in asp.net"

于 2012-07-19T10:05:56.713 に答える
0

valAlloc.setValue(SomeNumber); を使用して値が設定されていないようです。以下のメソッドを呼び出す前に

または、valAlloc.val のデフォルト値がゼロになっていると言えます。

protected void btnSaveValue_Click(object sender, ImageClickEventArgs e)
    {
        lblResult.Text = "Value now is:" + valAlloc.getValue();   //DOESNT WORK??????!!!!!
    }

so you lblResult.Text is getting a zero from  valAlloc.getValue()
于 2012-07-19T10:08:02.320 に答える
-1

静的オブジェクトと定義された静的リンケージを探しているようです。この場合、グローバル静的オブジェクトが機能する場合は、私の返信に投票してください。

于 2012-07-19T10:05:15.630 に答える