1

ASP.NET Web ページ更新パネルで参照しているグローバル変数があります。更新パネルで何が起こるかを次に示します。

    accidentListType.Add(Convert.ToString(AccidentDescription.SelectedItem));
        if (Atfault.Checked)
        {
            accidentAtFault.Add("True");
        }
        else accidentAtFault.Add("False");
        DateTime newDate = new DateTime(Convert.ToInt32(accidentyear.Text), Convert.ToInt32(accidentmonth.Text), 1);
        accidentListDate.Add(newDate);
        TestAccidentLabel.Text = "Success! " + newDate.ToString();

基本的に、ボタンがクリックされるたびに、リストに別のメンバーが追加されます。しかし、コードを実行するたびに、不思議なことに新しいインデックスが削除されるので、すべてのアクシデントをデータベースに追加しようとすると、追加するアクシデントはありません。また、事故データベースへの入力の 1 つが別のテーブルからの ID であるため、それらを動的に追加することはできません。これは、テーブルが作成されたときに取得するため、いずれにせよ後ですべてを追加する必要があります。

誰でも助けることができますか?PS 初めての投稿なので、見づらかったらすみません。

4

1 に答える 1

1

あなたに欠けているものは2つあります。リストはグローバルですが、リクエストごとにページオブジェクトが破棄されるため、リストをセッションに保持しない限り、値は保持されません。また、新しい値を追加するために、セッションで保持したリストを再利用する必要があります。以下のようにしてください。

//at the start of block
//check if there is anything in Session
//if not, create a new list
if(Session["accidentListType"] == null)
   accidentListType = new List<string>();
else //else a list already exists in session , use this list and add object to this list
  accidentListType = Session["accidentListType"] as List<string>;

//do your processing, as you are doing

//and at the end of bloack store the object to the session
Session["accidentListType"] = accidentListType
于 2012-07-16T16:54:42.727 に答える