在我的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 {
}
}
第一次将数据保存在字典中,但第二次使用第一次更新字典。我想保留所有这些。
任何形式的帮助都会被优雅地接受。
答案 0 :(得分:2)
您定义的字典是本地方法变量,每次调用该方法时都会启动该变量,因此您之前的数据将丢失。事件页面不维护页面数据成员的状态。您可以将其存储在ViewState
,Session
或Application
对象中,具体取决于您以后需要的位置。您还可以考虑将其存储在某些持久性介质上,例如数据库。
如果您希望将其用于同一页面,则可以使用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) {}
}