ASP.net ViewState-無効になっている場合でも、いくつかのビューステートが存在します。どうして?

StackOverflow https://stackoverflow.com/questions/413558

  •  03-07-2019
  •  | 
  •  

質問

ページ上でEnableViewStateプロパティが無効になっている場合でも、ページ上にいくつかのビューステートがまだ表示されています:

"<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="VkBAB3n5LZYtY+nTzk1vEu1P/6QLf4qzFIKzpFRJe3DMf8UseUA/1RsO409HJX4QhkROSP0umoJvatjK/q+jXA==" />"

私の質問はなぜですか?

役に立ちましたか?

解決

これは、ControlStateを使用しているコントロールである可能性があります。コントロール状態を持つコントロールは、ViewState設定を無視します。

他のヒント

これは制御状態です。

ビューステートとコントロールステートを本当に削除したい場合、このコードをページの分離コードで使用するか、分離コードが派生するクラスで使用できます

class MyPage : Page {
    private class DummyPageStatePersister : PageStatePersister {
        public DummyPageStatePersister(Page p) : base(p) {}
        public override void Load() {}
        public override void Save() {}
    }
    private DummyPageStatePersister _PageStatePersister;
    protected override PageStatePersister PageStatePersister {
        get {
            if (_PageStatePersister == null)
                _PageStatePersister = new DummyPageStatePersister(this);
            return _PageStatePersister;
        }
    }

    // other stuff comes here
}

ただし、これを行うときは、コントロールとの契約に違反しているため、非常に注意してください。 MSDNでは、制御状態は常に利用可能であると明示的に述べています。しかし実際には、私にとってはうまくいきました。

編集: 私は下票を投じられたので、もう一度指摘したいのです。あなたが何をしているかを正確に知っていない限り、これをしないでください。私の場合、アプリケーション全体のほとんどがクライアント側のJavaScriptで記述されており、ポストバックが発生したいくつかの場所では、常にRequest.Formコレクションを使用して値を取得していました。 これを行う場合は、単純なレンダリング以外にはサーバー側のコントロールを使用しないでください。

この記事は少し古いですが、私の理解では、ほとんどのポイントはまだ有効です:

  1. ViewStateを使用する場合は、ASPXページにサーバー側のフォームタグ()が必要です。 ViewState情報を含む非表示フィールドがサーバーにポストバックできるように、フォームフィールドが必要です。また、ASP.NETページフレームワークは、ページがサーバーで実行されるときに非表示フィールドを追加できるように、サーバー側のフォームである必要があります。
  2. ページ自体は、約20バイトの情報をViewStateに保存します。これは、ポストバック時にPostBackデータとViewState値を正しいコントロールに配布するために使用します。そのため、ページまたはアプリケーションでViewStateが無効になっている場合でも、ViewStateに残りの数バイトが表示される場合があります。
  3. ページがポストバックしない場合、サーバー側タグを省略することでページからViewStateを削除できます。

http://msdn.microsoft.com/en-us/library /ms972427.aspx

これはに関する非常に素晴らしい記事です。 ASP.NETで開発する場合はViewState をお読みください!

ASP.NET ViewState Helper は、進行状況を確認するための優れたツールでもあります。 ViewStateでオン

Controlstateが原因である可能性があります。制御状態を無効にすることはできません。 ASP.NET 2.0では、制御を機能させるために必要なデータ(controlstate)と、その他のデータ(viewstate)が区別されます

そして、はい、いくつかのコントロールはcontrolstateなしでは動作しません。 どれが原因であるか、またはビューステートに何が含まれているかを知りたい場合は、 viewstate viewerをチェックしてください。

テキストボックス、チェックボックスなどのような IPostBackEventHandler を実装するコントロール。ビューステートを無効にしても状態を保持します。その理由は、ポストバックデータの読み込み段階で、これらのコントロールがポストバックフォームから状態情報を取得するためです。

ただし、 IPostBackEventHandler を実装しない label のようなコントロールは、ポストバックされたデータから状態情報を取得しないため、状態を維持するためにビューステートに完全に依存します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top