私は一連の一般的な ASP.NET コントロールを作成してきましたが、ビューステートに値を格納するタイミングと、値を格納しなくても問題ないと判断するタイミングについては、頭を悩ませているようです。
一方では、次のようなプロパティを含むコントロールの状態全体をビューステートに保存することは理にかなっています。
- ユーザーが入力したテキスト ボックスの値 (または任意のフォーム データ)
- 高さやページサイズなどの設定オプション
- コントロールがどのように構成されているかも - たとえば、グリッド ビューが構築されるすべてのデータ、またはグリッド自体を保存します。
パフォーマンスを無視して、viewstate に押し込むことができるほど良いです。これは、コントロールがポストバック間でまったく同じように動作し、「誤って」値を元に戻したり、無効になったことを「忘れたり」しないことを意味するためです。ただし、ビューステートは無料ではありません。すべてを格納するということは、コントロールが HTML とそのすべての内部プロパティの両方を出力してその HTML を作成することを意味し、ほとんどの場合、出力は 2 倍以上になります。
私の質問はパフォーマンスについてではなく、戦略についてです。どのような基準でプロパティをビューステートに置くことを決定しますか? 私はこれらの線に沿って何かを考えていました:
ユーザーがプロパティを変更できない場合、サーバーは常にプロパティを明示的に設定するため、viewstate から除外してもかまいません。のようなものでも
color=red
、ユーザーはこのプロパティを直接設定しません。このプロパティを間接的に設定する別の場所のボタンをクリックします。そのボタンまたはその所有者は、赤色をレンダリングするコントロールではなく、状態を保持する必要があります。
このロジックは、ビューステートに入る必要があるプロパティは次のとおりであることを意味します。
- のようなフォーム要素
<input>
(そして、Request.Form[c.UniqueID]
これを使用しても回避できます) - ユーザーがコントロール上で直接インタラクティブに制御できるプロパティ。
このロジックは理にかなっていますか?弱いようで、専門家からもっと聞きたいです。