维护回发之间的通用列表

时间:2010-09-14 15:17:02

标签: c# .net asp.net webforms

以下是我的代码隐藏内容:

List<Event> events = new List<Event>();

protected void Page_Load(object sender, EventArgs e)
{

}

protected void AddEvent_Click(object sender, EventArgs e)
{
    Event ev = new Event();

    ev.Name = txtName.Text;

    events.Add(ev);
}

我想在每次单击“添加”按钮时将项添加到列表中,但是每次回发后都会重置列表。如何在回发之间保留列表中的数据?

4 个答案:

答案 0 :(得分:8)

我经常使用这样的技术,但请记住,这会导致您的viewstate(渲染到浏览器)变得相当大:

public List<Event> Events 
{
  get { return (List<Event>)ViewState["EventsList"]; }
  set { ViewState["EventsList"] = value; }
}

然后当你想使用这个列表时,你会做这样的事情:

public void AddToList()
{
    List<Event> events = Events; // Get it out of the viewstate
    ... Add/Remove items here ...
    Events = events; // Add the updated list back into the viewstate
}

另请注意,您的Event类需要是可序列化的,但这通常就像将[Serializable]属性添加到类中一样简单(除非它是一个非常复杂的类)。

答案 1 :(得分:1)

你需要以某种方式自己维护列表。您可以将其填充到ViewState中,将其推送到数据库,将其存储在Session中,将其放入页面上的HiddenField中...

答案 2 :(得分:1)

将列表保存到会话或视图状态。

protected void AddEvent_Click(object sender, EventArgs e)
{
    Event ev = new Event();

    ev.Name = txtName.Text;
    if(Session["events"] == null)
    {
      Session["events"] = new List<Event>();
    }
    var events = (List<Event>)Session["events"];
    events.Add(ev);
}

答案 3 :(得分:0)

感谢CodingGorilla,这解决了我的问题。但我必须为新人增加一件事。

List<Event> events = Events; // Get it out of the viewstate
**You should check whether events is null** 
Events = events; // Add the updated list back into the viewstate