<input type='checkbox' />
Renderメソッドでレンダリングするいくつかのコントロールを持つカスタムコントロールを作成したいと思います。これらのコントロールでViewStateを保持することは可能ですか(チェックされているかどうかなど)?
ASP.NETサーバーのCheckBoxコントロールを使用し、this.Controls.Add()を使用してOnLoadイベントに追加し、毎回同じIDを与えることでこれを行う方法がありますが、これを行うのは面倒です:)
ViewStateを動的コントロールに復元する場合は、ロードイベントの前にそのコントロールを再作成する必要があります。つまり、そのコードをInit
ハンドラーに配置するということです。
コントロールを作成するときは、必ず最初にそれらをページに追加し、後でそれらにプロパティを設定してください。これは、ViewStateマネージャーが管理対象のコントロールを検討するためには、変更を検出する必要があり、コントロールがControlsコレクションに追加された後にのみ変更を検出できるためです。
明示的なIDを設定することも重要です。ViewStateを保存および復元するときは、コントロールIDが一致している必要があります。
また、ページライフサイクルの適切なタイミング(OnInit)でコントロールを作成するようにしてください。
ViewStateに直接アクセスできます。
bool checked = (bool)(ViewState["ThisControlCheckState"] ?? false);
if (checked) {
write("<input ... >");
}
else {
write("<input ... >");
}
ユーザーからの値を保存するには、PostBackで次のようにします。
ViewState["ThisControlCheckState"] = request.Params["checkboxName"].ToString() == "1";