ビューステートの唯一の問題は、それを悪用することです。デフォルトではすべてオンになっているため、これは簡単に発生します。ページでデフォルトですべてをオフにすることもできず、特定のコントロールを選択的にオンにすることもできません (4.0 でこれのサポートが追加されます)。viewstate=false を含むコードはほとんど見られず、情報のリストを使用すると、すぐに大きくなる可能性があります。
それをひどく悪用するサードパーティのコントロールさえあります. ページが非常に遅い理由を見つけるのを手伝わなければなりませんでした (機能しないなど)、ダウンロードされる情報の量が膨大であることが判明しました。その原因は、ビューステートがコンテンツのサイズの 10 倍以上だった (本当に)そしてそれはあなたがそれに渡したすべてのものを保存するのが好きなサードパーティのコントロールでした(オブジェクトの階層を渡されたので本当に醜いものになりました)。
したがって、本当の問題はビューステートではなく、そのサイズです。すでに大きなビューステートの問題 (上記の極端ではなく、通常の大きなもの) がある場合は、それをサーバー上のセッションに移動すると、膨大な量の情報が保存されることになります。これは問題をある場所から別の場所に移動させ、おそらくその影響の一部を緩和しますが、実際の問題には対処せず、不要な状態を保存しすぎます (開発者が行ったか、サードパーティの動作が不適切なため)。
とはいえ、それを通常のasp.netアプローチの唯一の主な問題とは呼べないと思います。これを「開発しないでください」と解釈しないでください。「開発する場合は、それをよく知ってください」のように考えてください。私は通常のasp.netで多くの作業を行っていますが、うまく機能します。この時点で始めるとしたら、asp.net mvc を使用すると思いますが、通常の asp.net では、開発者がそれを正しく行うには、さらに多くのことが必要になると思います。