0

我做了一个属性,如下所示。

public ListItem[] DropDownListItems
        {
            get { return (ListItem[])ViewState["DropDownListItems"]; }
            set { ViewState["DropDownListItems"] = value; }
        }

这就是我分配值的方式

ListItem[] litem = new ListItem[7];
litem[0] = new ListItem("View", "RowView");
litem[1] = new ListItem("ReadView", "RowReadView");
litem[2] = new ListItem("WriteView", "RowWriteView");
litem[3] = new ListItem("DeleteView", "RowDeleteView");
this.DropDownListItems=litem;

但我收到以下错误

Assembly 中的“System.Web.UI.WebControls.ListItem”未标记为可序列化。

如何解决

4

2 回答 2

1

我相信这是因为您试图将 ListItem 的集合放入 ViewState 中,并且 ViewState 在页面上被序列化为文本,它表示 Class ListItem 不可序列化,因为它们不是,您可能必须使用其他东西并执行例如,一些使用 Dictionary(Of String,string) 的后处理逻辑。

于 2013-01-30T15:37:33.090 回答
1

为了在 ViewState 中存储事物,它必须但必须是可序列化的。显然,根据给出的错误消息,您尝试推入的类型实际上不是可序列化的。

要解决此问题,您可以创建一个包装器,如果您愿意,它封装项目的数据,然后可以将其转换为 UI 控件。这样,您也只将所需的数据存储在(已经有问题的)ViewState 中。

于 2013-01-30T15:38:27.763 回答