2011-06-20 20 views
1

Webフォーム(aspx)と関連するコードファイル(aspx.cs)があるとします。 codefileで クラスのフィールドは、ASP.NET Webフォームクラスでどのように扱われますか?

、例えば、我々は次のようしている:

public partial class MyPage : System.Web.UI.Page { 

    int myint; 
    string mystring; 

    public void Page_Load(object sender, EventArgs e) { 
     ... 
     if (!this.IsPostBack) { 
     this.myint = 2; 
     this.mystring = "Hello"; 
     } 
     ... 
    } 

} 

が、私は毎回ページがポストバックされた2つの変数を持つことを期待することはできますか?つまり、ページクラスのフィールドはWebフォームの状態の一部として保持されていますか?

ありがとう

答えて

4

あなたはadd them to itにあなたが持っているViewStateにそれらを保持したい場合はありません、これらのオブジェクトは、Page-Lifecycle. の端部に配置されることになります。

ViewStateに格納する必要があるオブジェクトは、serializableである必要があります。

ASP.NETの状態管理のほとんどのタイプと同様のViewState

における単純データ型を格納する、ビューステートが各項目 が一意の文字列でインデックス化され 辞書の収集、に依存しています名。例えば は、このコードを考えてみます。

ViewState["ViewStateVariableName"] = 1; 

これは、ViewStateのコレクションに値1(というか、値1が含まれてい 整数) を配置し、 はそれを説明する名前を与えます ViewStateVariable。現在 の名前が ViewStateVariableの項目がない場合、新しい項目は に自動的に追加されます。この の名前ですでにインデックスに登録されているアイテムが の場合、置き換えられます。

ビューステート変数が追加されたページ/コントロール内のどこでもこの変数にアクセスできます。 値を取得するときは、 のキー名を使用します。

int number = (int) ViewState["ViewStateVariable"]; 

また、適切なデータ型に取り出さ 値をキャストする必要があります。 これは、ViewState コレクションにすべてのアイテムが汎用の オブジェクトとして格納されているため、 の基本タイプの任意のタイプのデータ型を柔軟に格納できるためです。実際には のビューオブジェクトには、 ビューステートでカスタムオブジェクトを格納することもできます。あなたは 数値と文字列型を格納とあなたは同じように簡単にビュー 状態で、独自のオブジェクトを格納することができます

ビューステートで

保存するオブジェクト。ただし、 にアイテムを表示するには、ASP.NET を バイトのストリームに変換して、 を ページの非表示の入力フィールドに追加できるようにする必要があります。このプロセスは、 シリアライゼーションと呼ばれます。オブジェクトが のシリアル化可能でない場合(デフォルトでは ではありません)、 をビューステートにすると、エラー というメッセージが表示されます。

+0

ティム私はあなたが私の.NET GURUになってきていると思います!いつもとても冗長であり、あなたの答えを明確にしてくれてありがとう、ありがとう。 :) – Andry

2

いいえ、そうではありません。彼らはviewstateに固執されていません。

それらを永続化するために、あなたはそのように、彼らにViewStateにその値を格納するプロパティを作成する必要があります。

public string MyString 
{ 
    get { return (string) ViewState["MyString"]; 
    set { ViewState["MyString"] = value; } 
} 
関連する問題