列表在提交时被清空

时间:2013-12-06 08:31:18

标签: c# asp.net list

我有一个C#应用程序,我需要列表“记住”之前输入的内容。

http://oi40.tinypic.com/2ivhcuw.jpg

因此,一旦添加了与会者,如果添加了新的与会者,则之前的与会者将留在列表中。目前它只显示最近的与会者,我希望他们保存,直到我决定清除它们(可能在会话中?)

List<Information> infoList = new List<Information>();
Information data = new Information();

firstName = resultEntry.Properties["givenname"].Value.ToString();
lastName = resultEntry.Properties["sn"].Value.ToString();
fullName = firstName + " " + lastName;

//data.CWID = resultEntry.Properties["username"].Value.ToString();
data.FullName = fullName;
// data.Email = resultEntry.Properties["email"].Value.ToString();

infoList.Add(data);

2 个答案:

答案 0 :(得分:2)

取决于“保存”持续时间的长度:

使用ViewState - 如果您希望列表在页面加载时为空(而不是回发)。 (即ViewState["data"] = infoList

使用Session - 如果您想根据某些条件手动清空列表。

答案 1 :(得分:2)

用于将项目存储到会话中:

Session["MyInformation"] = data;

从会话中接收数据

List<information> data = (List<information>)Session["MyInformation"];

但要注意:会话应该被遗忘。

有人可能会考虑使用viewstate但请注意:viewstates会使页面变慢。 (在添加viewstate时,简单测试html页面的大小)

最后一个选项可能是包含Cookie以便更长时间保留这些项目。

写一个cookie:http://msdn.microsoft.com/en-us/library/78c837bd(v=vs.100).aspx

阅读Cookie:http://msdn.microsoft.com/en-us/library/bd70eh18(v=vs.100).aspx

另一种选择是将数据保存在database =&gt;中然而,这意味着更多的流量。

(也是对会话的一个小提示,将它们放在一个单独的静态类中,这样你就可以让它们通过整个项目而不是一个页面

public static class MySessions
{
    public static List<Information> MyData
    {
     get{
        //EDIT in the GET
        if(HttpContext.Current.Session["MyInformation"] != null)
          return (List<information>)HttpContext.Current.Session["MyInformation"];
        else
          {
          HttpContext.Current.Session["MyInformation"] = new List<Information>();
          return new List<Information>();
          } 
         }
     set{HttpContext.Current.Session["MyInformation"] = value;}
    }
}

编辑:

使用如下的类:(它是一个静态类,通过输入类名后跟属性,你可以调用它而不是首先实例化类。

//Set the value from Somewhere
MySessions.MyData = new List<Information>();

//get the values from somewhere
var myInfo = MySessions.MyData;