【发布时间】:2014-08-12 05:56:25
【问题描述】:
我创建了一个面板来存储我的 ListBox,我的目标是在我按下页面上的 Button 控件时动态添加新的 Listbox。
我创建了一个继承 List 类的 MyList 类,并应用了 [Serializable] 标签。我已经应用序列化来将对象存储在视图状态中。
MyList 类将存储所有动态创建的 ListBox。
问题:
- 当代码运行时,页面加载但是当我单击按钮时 存储列表的viewstate报错,怎么回事?
- 据我所知,我只需要序列化 MyList 类即可将其存储在 视图状态,这是正确的吗?
-
MyList的基类(List)还需要序列化吗?
public partial class _default : System.Web.UI.Page { MyList<ListBox> myList; protected void Page_Load(object sender, EventArgs e) { myList = new MyList<ListBox>(); myList.Add(new ListBox()); Panel1.Controls.Add(myList[0]); Button1.Click += Add_ListBox1; } public void Add_ListBox1(object sender, EventArgs e) { ListBox temp_listBox = new ListBox(); myList.Add(temp_listBox); Panel1.Controls.Add(temp_listBox); ViewState["ListBox_list"] = myList; } } [Serializable] public class MyList<ListBox> : List<ListBox> { }
点击前加载的页面:
点击按钮后的错误信息:
【问题讨论】:
-
System.Web.UI.WebControls.ListBox 不是可序列化的组件。我认为您添加到网页的任何列表框都会自动使用视图状态。您存储 mylist 的目的是什么?
-
列表框将用于创建产品类别选择。根据在一个列表框上所做的选择,子类别将显示在下一个列表框上。它必须是动态的,因为列表框的数量可能会因所选的子类别或类别而异。需要将列表框传输到服务器才能从数据库中读取和写入数据。
-
我同意布赖恩的观点。也许您可以使用树视图而不是使用动态列表框。
标签: c# asp.net object viewstate serializable