2016-04-15 10 views
1

ViewState値を必要とする共通ルーチンを使用するいくつかのWebページを書きました。共有クラス内からViewStateにアクセスするにはどうすればよいですか?

ViewStateを関数に渡すことはできますか?

もしそうなら、どうですか?

もしそうでなければ、クラス内のメソッドから他にどのようにアクセスできますか?

+0

あなたは 'ViewState'からすでに抽出した関連する値だけを呼び出す前に、' Page'インスタンスまたはそれ以上のものを渡すことができます。 –

答えて

0

これは重要な文です:

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_LoadViewStateからクラスを抽出する(または必要に応じて新しいインスタンスを作成します)、それを読んで、それを操作、他の関数に渡し、その後、あなたが完了したら、あなただけ保存することができますこの方法全体がそのままViewStateに戻ります。