Я часто использую подобную технику, хотя имейте в виду, что это может привести к тому, что ваше состояние просмотра (отображаемое в браузере) станет довольно большим:
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] к классу (если только он не является действительно сложным классом).).