8

ページ上でEnableViewStateプロパティが無効になっている場合でも、ページ上にいくつかのビューステートが存在することを確認しています。

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

私の質問はなぜですか?

4

6 に答える 6

8

コントロール状態です。

viewstate と controlstate を本当に取り除きたい場合は、ページのコード ビハインド、またはコード ビハインドの派生元のクラスでこのコードを使用できます。

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 コレクションを使用して値を取得していました。これを行う場合は、単純なレンダリング以外の目的でサーバー側のコントロールを使用しないでください。

于 2009-01-05T16:12:32.707 に答える
4

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

于 2009-01-05T15:59:41.393 に答える
3

この記事は少し古いですが、私の理解では、ほとんどの点がまだ有効です。

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

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

于 2009-01-05T16:06:54.560 に答える
2

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

ASP.NET ViewState Helperは、ViewState で何が起こっているかを確認するための優れたツールでもあります。

于 2009-01-05T19:32:14.053 に答える
0

Textbox、Checkbox などのIPostBackEventHandler実装するコントロール。ビューステートを無効にした後でも状態を保持します。その理由は、Load Postback Data ステージ中に、これらのコントロールが Postback フォームから状態情報を取得するためです。

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

于 2013-04-30T07:23:48.183 に答える
0

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

はい、一部のコントロールは controlstate がないと機能しません。どちらが原因であるか、ビューステートに何が含まれているかを知りたい場合は、ビューステート ビューアーをチェックしてください。

于 2009-01-05T19:22:00.923 に答える