2017-06-17 5 views
0

私の問題は、私のリストがポストバックの間に保持されないということです。 は私がCheckBoxListがトリガされたときにセッションがPostBackの属性を保存しない

Page.Session["mine"] 

にそれを保存しています私のデザインのページには、2つのコントロール(ラベルおよびCheckBoxListの)で構成されています。

アイテムの数が変更されるため、個々のCheckBoxコントロールの代わりにCheckBoxListを使用し、page_load()で各アイテムを動的に読み込みます。

メンバー、属性、またはプロパティの名前が不明です。しかし、私は、クラスの各メソッドが呼び出すことができる変数を持っているので、CheckBoxList上のすべての選択された項目の位置を保持しています。 OnSelectedIndexChanged()がトリガされると、locCheckが

locCheck = new List<int>(); 
int num = 0; 
foreach(ListItem li in CheckBoxList.Items) 
{ 
    if(li.Selected) 
     locCheck.Add(num); 

    num++; 
} 

if(locCheck.Count == 0) //for testing purpose 
    locCheck.Add(1); //2nd item 

Page.Session["mine"]=locCheck; 

セッション

に更新されて格納される

Private List<int> locCheck = new List<int>(); 

私はポストバックで選択されているチェックしておきたいが、それは起こりません。 Visual Studioでは何の問題もありません。しかし、私は、サーバーにロードすると、私はモノを使用しています、私は次のメッセージが出ます:

Object reference not set to an instance of an object 

を私がPage_Loadの

if(Page.IsPostBack) 
{ 
    locCheck = new List<int>(); 
    locCheck = (List<int>) Page.Session["mine"]; 
    Label.Text = String.Format("Is PostBack {0}/{1}", locCheck.Count, CheckBoxList.Items.Count); 
} 
else 
{ 
    Label.Text = String.Format("Is Not PostBack 0/{0}", CheckBoxList.Items.Count); 
} 

でこれを持って、私は問題は、locCheck.Count決してこの行ではありません知っていますLabel.Text

の変化
locCheck =(List<int>) Page.Session["mine"]; 

私は

if(Page.Session["mine"] != null) 
を添付する必要があります知っています

しかし、私は現在それが必要であるとは思わない。テスト目的のために、少なくとも1つの要素を持つlocCheckが常に存在する必要があります。

私は答えを見つけることができなかったので、私は最初から始めました。チェックリストの代わりに、私はチェックボックスのパネルを使用して、必要でないときは目に見えなくなります。

私はセッションについてまだ不明ですが、私は奇妙なものを発見しました。例えば

Session["mine"] = locCheck; //where lockCheck has 4 elements 

locCheckがいつかボタンクリックにPage_Loadの間にnullに設定された時間があります。 私はこれがそうであるとき、locCheckがヌルでなく、正しい要素値を持っているところにデバッグすることを発見しました。その後、次の手順を実行します。

Session["mine"] = locCheck; 

と私はこれをしない場合は、後に、あなたは、いくつかの理由で、クリックイベント

locCheck = new List<int>(); 
locCheck = (List<int>) Session["mine"]; 

//then make your update: 
locCheck[3] = 7; 
Session["mine"] = locCheck; 

に次のコードを実行するセッションの両方の[「地雷」]とlocCheck nullになり、データが失われます。

答えて

0

はあなただけのセッションを使用することができるときpage.sessionを使用する理由は、この

 locCheck = (List<int>) Page.Session["mine"].ToString(); 

を使用するようにしてください。

関連する問題