我要做的是将值保留在数组中,直到我在SendEmail()
之后清除它。似乎会话数组被覆盖。任何帮助都很棒。
所以我的意思是将另一条记录添加到ArrayList,直到我在SendEmail()例程中清除它。
当然以后我需要删除ArrayList
中的重复记录。
这是我的C#2.0代码:
在Login.cs中
public void Page_Load(object sender, EventArgs e)
{
Session["MyArrayList"] = null;
}
在Share.cs中
public void Page_Load(object sender, EventArgs e)
{
ArrayList idList = new ArrayList();
idList.Add(System.IO.Path.GetFileName(FileName));
Session["MyArrayList"] = idList;
}
protected void SendEmail(object sender, EventArgs e)
{
// To view the Arraylist
ArrayList idList = (ArrayList)Session["MyArrayList"];
foreach (string val in idList)
{
Response.Write(val);
}
}
答案 0 :(得分:2)
首先使用List<T>
代替ArrayList
。
List<string> idList = new List<string>();
idList.Add(System.IO.Path.GetFileName(FileName));
注意:List<T>
将提供类型安全性,因此如果您尝试将除string
之外的任何内容添加到列表中,则会出现编译错误。
其次,您只需在首次加载页面时更新Session
值,而不是在每个帖子上更新,而是执行此操作:
在Login.cs中
public void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
Session["MyArrayList"] = null;
}
}
在Share.cs中
public void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
ArrayList idList = new ArrayList();
idList.Add(System.IO.Path.GetFileName(FileName));
Session["MyArrayList"] = idList;
}
}
答案 1 :(得分:0)
由于每次页面加载问题时都需要实际向列表添加内容,因此每次加载时都要实例化一个新的ArrayList。所以东西会被覆盖而不是被添加。这是你真正需要做的事情
Login.cs
public void Page_Load(object sender, EventArgs e)
{
Session["MyArrayList"] = new ArrayList();
}
Share.cs
public void Page_Load(object sender, EventArgs e)
{
ArrayList idList = (ArrayList)Session["MyArrayList"];
idList.Add(System.IO.Path.GetFileName(FileName));
Session["MyArrayList"] = idList;
}
在登录页面中,我们实例化列表并将其存储在会话中。在另一个页面中,我们从会话中获取先前存储的列表并将其分配给idList
并正确投射,然后我们将新内容添加到其中并将其返回到会话中。
注意: 如果会话为空或者不包含ArrayList,则会生成异常。所以你可能需要在代码中加入一个检查机制。