1

我要做的是将值保留在数组中,直到在SendEmail(). 似乎会话数组正在被覆盖。任何帮助都很棒。

所以我的意思是向 ArrayList 添加另一条记录,直到我在 SendEmail() 例程中将其清除。

当然,稍后我需要删除ArrayList.

这是我的 C# 2.0 代码:

在登录.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); 
    }
}
4

2 回答 2

2

首先使用List<T>而不是ArrayList.

List<string> idList = new List<string>();
idList.Add(System.IO.Path.GetFileName(FileName));

注意:List<T>将提供类型安全,因此如果您尝试将除 a 之外的任何内容添加string到列表中,那么您将收到编译错误。

其次,您只需要Session在首次加载页面时更新值,而不是在每次回帖时更新值,而是这样做:

在登录.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;
    }          
}
于 2013-09-20T18:38:23.987 回答
0

由于每次页面加载时您都需要将内容实际添加到列表中,因此您的问题是每次加载时都在实例化一个新的 ArrayList。所以东西被覆盖而不是被添加。这是你真正需要做的

登录.cs

public void Page_Load(object sender, EventArgs e)
{
    Session["MyArrayList"] = new ArrayList();
}

分享.cs

public void Page_Load(object sender, EventArgs e)
{
        ArrayList idList = (ArrayList)Session["MyArrayList"];   
        idList.Add(System.IO.Path.GetFileName(FileName));
        Session["MyArrayList"] = idList;                 
}

在登录页面中,我们实例化列表并将其存储在会话中。在另一个页面中,我们从 session 中获取先前存储的列表并将其分配给idList并正确转换,然后我们将新内容添加到其中并将其返回给 session。

注意:如果会话为空或不包含 ArrayList,这将生成异常。所以你可能需要在你的代码中加入一个检查机制。

于 2013-09-20T18:37:36.403 回答