ViewState値を必要とする共通ルーチンを使用するいくつかのWebページを書きました。共有クラス内からViewStateにアクセスするにはどうすればよいですか?
ViewStateを関数に渡すことはできますか?
もしそうなら、どうですか?
もしそうでなければ、クラス内のメソッドから他にどのようにアクセスできますか?
ViewState値を必要とする共通ルーチンを使用するいくつかのWebページを書きました。共有クラス内からViewStateにアクセスするにはどうすればよいですか?
ViewStateを関数に渡すことはできますか?
もしそうなら、どうですか?
もしそうでなければ、クラス内のメソッドから他にどのようにアクセスできますか?
これは重要な文です:
ViewStateが
値しかし、機能が本当に「ViewStateの」値を必要としない必要な共通ルーチン - 彼らは値が必要です。関数がstring
またはint
で動作している場合は、そのように関数を記述することをお勧めします。これにより単体テストが容易になります。
それはあなたが読んで、および/または操作したい非常に具体的な値の数だ場合、あなたはこのようなクラスを作成できます。
public class MyPageValues
{
public string Value1 {get;set;}
public string Value2 {get;set;}
}
をし、その後から値をロードし、コンストラクタまたは拡張メソッドを追加ViewState
。
public class MyPageValues
{
public string Value1 {get;set;}
public string Value2 {get;set;}
public MyPageValues(){} //default constructor
public MyPageValues(System.Web.UI.StateBag viewState)
{
Value1 = (string)viewState["Value1"];
Value2 = integer.Parse(viewState["Value2"]); //Do some better checking.
}
}
さらに、クラス全体をビューステートにシリアル化してそこから取得するだけです。
[Serializable()]
public class MyValues
{
public string Value1 {get;set;}
public string Value2 {get;set;}
}
public partial class YourPage: System.Web.UI.Page
{
private MyValues _values;
protected void Page_Load(object source, EventArgs e)
{
_values = ViewState["myValues"] as MyValues ?? new MyValues();
}
protected void Page_PreRender(object sender, EventArgs e)
{
ViewState["myValues"] = _values;
}
}
あなたはPage_Load
でViewState
からクラスを抽出する(または必要に応じて新しいインスタンスを作成します)、それを読んで、それを操作、他の関数に渡し、その後、あなたが完了したら、あなただけ保存することができますこの方法全体がそのままViewState
に戻ります。
あなたは 'ViewState'からすでに抽出した関連する値だけを呼び出す前に、' Page'インスタンスまたはそれ以上のものを渡すことができます。 –