2012-05-18 19 views
0

我創建了Listbox食物(蘋果,香蕉等),並在頁面上運行Javascript,將列表中的所選項目添加到ArrayList並作爲按鈕。該按鈕的功能是當您點擊它時,該項目將從ArrayList中刪除,同時該按鈕也被刪除(回發後)。在一次回傳後從列表中刪除

當我運行此代碼時,它將項目添加到列表並按預期創建按鈕。但是,當我單擊按鈕時,它不會從列表中刪除項目,直到頁面再次加載。

我該怎麼做才能在點擊和第一次回發之後從ArrayList中刪除該項目,而不是在兩次回發之後?

static private ArrayList myAL { set; get; } 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
     myAL = new ArrayList(); 

    Report1(); 

    Label1.Text = myAL.Count.ToString(); 
} 

private void Report1() 
{ 
    String FullFilter = ""; int FilterCount = 0; 

    if (Request.Params["ListBox1Hidden"] != null && (string)Request.Params["ListBox1Hidden"] == "doubleclicked") 
     myAL.Add(lstBox.SelectedItem.Text); 

    myAL.Remove(Session["RemoveButton"].ToString()); 
    foreach (Object obj in myAL) 
    { 
     FilterCount++; 
     if (FilterCount > 1) 
      FullFilter += ", "; 

     FullFilter += String.Format("'{0}'", obj); 

     Button button = new Button(); 
     button.Text = obj.ToString(); 
     button.ID = "Dist" + obj.ToString(); 
     button.Click += new EventHandler(ButtonClickOneEvent); 
     PlaceHolder1.Controls.Add(button); 
    } 

    Label1.Text += FullFilter; 
} 

void ButtonClickOneEvent(object sender, EventArgs e) 
{ 
    Button button = sender as Button; 
    myAL.Remove(button.Text); 
} 
+1

是否有你需要使用ArrayList的原因?除非你有一個非常有說服力的理由,否則你應該總是使用強類型的通用數據結構。 – MgSam

+0

請勿在「ASP.NET C# - 」等前加前綴。這就是標籤的用途。 –

+0

另外,你是否意識到'靜態'字段在應用程序的所有用戶之間共享?這可能不是你想到的:如果一個用戶刪除一個列表項目,下一個用戶將看到該項目被刪除。 –

回答

0

你可以保存視圖狀態,表明第一回發已處理的值。這可能是在這種情況下最直接的方法,而無需處理其他處理靜態值的方法。

+0

我只是試圖實現這一點,但最終ViewState值仍然只在第二次按鈕單擊或刷新後顯示在標籤中。 –

+0

你把視圖狀態調用放在哪裏? page_load將在按鈕事件之前觸發。您可能希望將視圖狀態管理置於PreRender事件中,因爲它將在頁面事件之前觸發。 – BrianM