ASP.NET アプリケーションを作成し、サーバーの IIS7 で実行しました。ブラウザでこの Web フォームを開いてサイトコードを表示すると、次のように表示されます...
Buttons、Labels、TextBoxes、および ListView を使用する多くのコントロールがあります。web.config で ViewState を無効にしようとしましたが、これを無効にすると、アプリケーションが正しく実行されません。私に何ができる?
ビューステートを必要としないコントロールのみを非アクティブにします。
そのためには、ビューステートとは何かを理解する必要があります。
ビューステートは、ページがコントロールの値を保存して記憶し、ポストバック後にそれらを保持する場所です。ビューステートはポストバック後に使用されることに注意してください。
したがって、実際には同じデータが2回ありますが、ビューステートのみが前のデータをポストバックし、コードビハインドはそのデータを使用できます。
したがって、主な問題は、入力した内容を記憶する必要があるのはどのコントロールであるか、または以前の状態を記憶する必要があるのはどのコントロールであるかということです。
EnableViewState をオンまたはオフにした単純なリテラルを見てみましょう。
<asp:Literal runat="server" EnableViewState="true" ID="txtLiterar">
このリテラルにテキストを配置すると、テキストはビューステートとコード ビハインドにも保存されます。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
txtLiterar.Text = "Hello There";
}
}
したがって、ポストバック後もリテラルにはまだコンテンツがあり、ビューステートにコンテンツがあり、自動的に再度埋められるため、再度埋めないようにすることができます。
<asp:Literal runat="server" EnableViewState="false" ID="txtLiterar">
このリテラルにテキストを配置すると、そのテキストはビュー ステートやコード ビハインドに保存されず、次のように追加されます。
protected void Page_Load(object sender, EventArgs e)
{
txtLiterar.Text = "Hello There";
}
したがって、違いは、すべての投稿で常にそのコントロールにデータを入力する必要があることです。
ビューステートの最も必要な部分は、ドロップダウン リストに入力するときです。そこには、SelectValue に正しい値を配置するための値を覚えておく必要があるデータバインドとコード ビハインドがあります。
データをページングするときに前のページやその他の情報を保持するため、GridView やその他のコントロールにも必要です。
そのため、ほとんどのコントロールでビューステートを閉じることができます。そのコントロールでは、ポストバックごとに再度入力でき、そのコントロールでは以前の状態を記憶する必要はありません。
詳細:ビューステートの
クラスを最適化する方法
ページを提供する前に ASP.NET ページのビューステートのサイズを決定
する AJAX 呼び出しでビューステート情報を制限する