C#字典中的多个对象

时间:2017-03-16 09:53:30

标签: c# asp.net dictionary

在我的asp.net应用程序中,我正在从文本框中检索数据并尝试创建字典对象。

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 { 

        }

    }

第一次将数据保存在字典中,但第二次使用第一次更新字典。我想保留所有这些。

任何形式的帮助都会被优雅地接受。

5 个答案:

答案 0 :(得分:2)

您定义的字典是本地方法变量,每次调用该方法时都会启动该变量,因此您之前的数据将丢失。事件页面不维护页面数据成员的状态。您可以将其存储在ViewStateSessionApplication对象中,具体取决于您以后需要的位置。您还可以考虑将其存储在某些持久性介质上,例如数据库。

如果您希望将其用于同一页面,则可以使用ViewState。如果您希望它用于当前用户会话并且可以跨页访问,那么您可以将其放在Session中。将其放在Application对象中将使其可以跨页面和用户访问。

您可以像这样在Application collection上创建属性。

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

答案 1 :(得分: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 :(得分: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 { 

        }

    }
}

希望这有帮助!

答案 3 :(得分:0)

为此,您应该使用会话 首先你应该将Dictionay保存到会话中,然后在下一次会话中从会话中获取它 使用这个简单的代码

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

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

答案 4 :(得分: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) {}
}