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;

しかし、次のエラーが表示されます

アセンブリの 'System.Web.UI.WebControls.ListItem' はシリアル化可能としてマークされていません。

解決方法

4

2 に答える 2

1

これは、ListItemのコレクションをViewStateに入れようとしていて、ViewStateがページ上でテキストとしてシリアル化されているためだと思います。ClassListItemはシリアル化できないため、シリアル化できないと言っています。別の方法を使用して実行する必要がある場合があります。たとえば、Dictionary(Of String、string)を使用する後処理ロジック。

于 2013-01-30T15:37:33.090 に答える
1

モノをViewStateに格納するには、シリアル化可能である必要がありますが、シリアル化可能である必要があります。明らかに、与えられたエラーメッセージによって、そこにプッシュしようとしているタイプは、実際にはシリアル化できません。

これを解決するために、必要に応じて、UIコントロールに変換できるアイテムのデータをカプセル化するラッパーを作成できます。このようにして、必要なデータのみを(すでに問題のある)ViewStateにも保存します。

于 2013-01-30T15:38:27.763 に答える