以下是我的代码隐藏内容:
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);
}
我想在每次单击“添加”按钮时将项添加到列表中,但是每次回发后都会重置列表。如何在回发之间保留列表中的数据?
答案 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