1

<input type='checkbox' />Renderメソッドでレンダリングするいくつかのコントロールを持つカスタムコントロールを作成したいと思います。これらのコントロールでViewStateを保持することは可能ですか(チェックされているかどうかなど)?

ASP.NETサーバーのCheckBoxコントロールを使用し、this.Controls.Add()を使用してOnLoadイベントに追加し、毎回同じIDを与えることでこれを行う方法がありますが、これを行うのは面倒です:)

4

3 に答える 3

2

ViewStateを動的コントロールに復元する場合は、ロードイベントの前にそのコントロールを再作成する必要があります。つまり、そのコードをInitハンドラーに配置するということです。

于 2008-11-11T17:51:27.640 に答える
2

コントロールを作成するときは、必ず最初にそれらをページに追加し、後でそれらにプロパティを設定してください。これは、ViewStateマネージャーが管理対象のコントロールを検討するためには、変更を検出する必要があり、コントロールがControlsコレクションに追加された後にのみ変更を検出できるためです。

明示的なIDを設定することも重要です。ViewStateを保存および復元するときは、コントロールIDが一致している必要があります。

また、ページライフサイクルの適切なタイミング(OnInit)でコントロールを作成するようにしてください。

于 2008-11-11T17:53:57.497 に答える
1

ViewStateに直接アクセスできます。

bool checked = (bool)(ViewState["ThisControlCheckState"] ?? false);
if (checked) {
    write("<input ... >");
}
else {
    write("<input ... >");
}

ユーザーからの値を保存するには、PostBackで次のようにします。

ViewState["ThisControlCheckState"] = request.Params["checkboxName"].ToString() == "1";
于 2008-11-11T17:45:50.960 に答える