ASP.Net AJAX を使用して、ASP.Net 3.5 WebForms でカスタム コントロールを作成しています。コントロールに状態切り替えを作成しています (展開モードと折りたたみモード)。コントロールの現在の状態を ViewState に保持しようとしており、サーバー側のイベント ハンドラーで手動で変更しています。
object oExpanded = ViewState[ "Expandedness" ];
if(oExpanded == null)
{
oExpanded = ListState.Collapsed;
}
ListState lsCurrentState = (ListState) oExpanded;
if(lsCurrentState == ListState.Collapsed)
{
//code snipped - move to expanded mode here
ViewState[ "Expandedness" ] = ListState.Expanded;
}
else
{
//code snipped - move to collapsed mode here
ViewState[ "Expandedness" ] = ListState.Collapsed;
}
重要ではないと思いますが、実際のレンダリングは updatepanel で行われ、上記のコードは非同期でトリガーされるイベント ハンドラーにあります。私が抱えている問題は、次のポストバックでViewState["Expandedness"]
null が返されることです。Fritz Onion の Viewstate Decoder ツールを使用して、ポストバック間のビューステートの実際の内容を確認しようとしましたが、シリアル化されたデータが無効であることがわかりました。
ここで間違ったアプローチをしましたか?この問題に取り組む正しい方法は何ですか?