2017-03-16 75 views
1

在我的asp.net應用程序中,我從文本框中檢索數據並嘗試創建一個字典對象。C#在字典中的多個對象

protected void btnAddBarcode_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     Dictionary<int, string> Barcodes = new Dictionary<int, string>(); 
     int i = Convert.ToInt32(lblItemsScanned.Text); 
     if (string.IsNullOrEmpty(txtBarcode.Text.Trim())) 
     { 
      ShowMessage("Please enter or scan barcode"); 
      return; 
     } 
     // Saving the Barcodes at first 
     else if (i < Convert.ToInt32(hdnTotalItems.Value)) 
     { 
      i++; 
      if (i == 1) 
      { 
       Barcodes.Add(i, txtBarcode.Text); 
       lblItemsScanned.Text = i.ToString(); 
       Session["Barcodes"] = Barcodes; 

       txtBarcode.Text = string.Empty; 
       i++; 
      } 
     } 
     else { 

     } 

    } 

第一次中的數據被保存在字典中,但第二次的字典是越來越與第一個更新。我想保留所有這些。

任何形式的幫助都會被優雅地接受。

+0

您每次都創建一個新實例。只有當會話中沒有人時才創建一個新的 –

+0

您正在方法內聲明您的字典爲「local」var。你必須把它放在對象的字段中 –

回答

0

Dictionary<int, string> Barcodes = new Dictionary<int, string>();每次都執行。所以你每次都初始化會話變量。你需要檢查它是否存在。

試試這個:

if(Session["Barcodes"]==null) 
    Session["Barcodes] = new Dictionary<int, string>(); 

Barcodes = (Dictionary<int,string>)Session["Barcodes"]; 
2

你定義的字典是在每次調用該方法使您以前的數據都將丟失時啓動本地方法變量。事件頁面不維護頁面數據成員的狀態。您可以將其存儲在ViewStateSessionApplication對象中,具體取決於您以後需要的位置。您也可以考慮將其存儲在某些持久性介質(如數據庫)中。

如果你想要它的同一頁,那麼你可以使用ViewState。如果您希望用於當前用戶會話並可跨頁訪問,則可以將其放入Session。將它放在Application對象中將使其可以跨頁面和用戶訪問。

您可以像這樣在應用程序集合上創建屬性。

public Dictionary<int, string> Barcodes 
{ 
    get { return (Dictionary<int, string>)Application["Barcodes"]; } 
    set { Application["Barcodes"] = value; } 
} 
0

你的字典對象條碼是越來越實例每次當你點擊。爲了避免這種情況,修改代碼如下,

protected void btnAddBarcode_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     Dictionary<int, string> Barcodes = Session["Barcodes"] == null ? new Dictionary<int, string>() : (Dictionary<int,string>)Session["Barcodes"]; 
     int i = Convert.ToInt32(lblItemsScanned.Text); 
     if (string.IsNullOrEmpty(txtBarcode.Text.Trim())) 
     { 
      ShowMessage("Please enter or scan barcode"); 
      return; 
     } 
     // Saving the Barcodes at first 
     else if (i < Convert.ToInt32(hdnTotalItems.Value)) 
     { 
      i++; 
      if (i == 1) 
      { 
       Barcodes.Add(i, txtBarcode.Text); 
       lblItemsScanned.Text = i.ToString(); 
       Session["Barcodes"] = Barcodes; 

       txtBarcode.Text = string.Empty; 
       i++; 
      } 
     } 
     else { 

     } 

    } 
} 

希望這有助於!

0

爲此,你應該使用會話 首先你應該保存到百科會話,然後在明年ittration從會議 用得到它這個簡單的代碼

if(Session["Barcodes"]==null) 
    Session["Barcodes] = new Dictionary<int, string>(); 

Barcodes = (Dictionary<int,string>)Session["Barcodes"]; 
0

嘗試。

protected void btnAddBarcode_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     Dictionary<int, string> Barcodes; 

     if (Session["Barcodes"] == null) 
     { 
      Barcodes = new Dictionary<int, string>(); 
     } 
     else 
     { 
      Barcodes = (Dictionary<int, string>)Session["Barcodes"]; 
     } 

     int i = Convert.ToInt32(lblItemsScanned.Text); 
     if (string.IsNullOrEmpty(txtBarcode.Text.Trim())) 
     { 
      ShowMessage("Please enter or scan barcode"); 
      return; 
     } 
     // Saving the Barcodes at first 
     else if (i < Convert.ToInt32(hdnTotalItems.Value)) 
     { 
      i++; 
      if (i == 1) 
      { 
       Barcodes.Add(i, txtBarcode.Text); 
       lblItemsScanned.Text = i.ToString(); 
       Session["Barcodes"] = Barcodes; 

       txtBarcode.Text = string.Empty; 
       i++; 
      } 
     } 
     else 
     { 

     } 

    } 
    catch(Exception) {} 
}