ページ上でEnableViewStateプロパティが無効になっている場合でも、ページ上にいくつかのビューステートが存在することを確認しています。
"<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="VkBAB3n5LZYtY+nTzk1vEu1P/6QLf4qzFIKzpFRJe3DMf8UseUA/1RsO409HJX4QhkROSP0umoJvatjK/q+jXA==" />"
私の質問はなぜですか?
コントロール状態です。
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 コレクションを使用して値を取得していました。これを行う場合は、単純なレンダリング以外の目的でサーバー側のコントロールを使用しないでください。
これは、ControlStateを使用しているコントロールである可能性があります。コントロール状態を持つコントロールは、ViewState設定を無視します。
この記事は少し古いですが、私の理解では、ほとんどの点がまだ有効です。
ASP.NET で開発する場合、これはViewStateに関する非常に素晴らしい記事です。ぜひお読みください。
ASP.NET ViewState Helperは、ViewState で何が起こっているかを確認するための優れたツールでもあります。
Textbox、Checkbox などのIPostBackEventHandlerを実装するコントロール。ビューステートを無効にした後でも状態を保持します。その理由は、Load Postback Data ステージ中に、これらのコントロールが Postback フォームから状態情報を取得するためです。
しかし、IPostBackEventHandlerを実装しないラベルのようなコントロールは、ポスト バックされたデータから状態情報を取得しないため、状態を維持するためにビューステートに完全に依存します。
Controlstate が原因である可能性があります。制御状態を無効にすることはできません。ASP.NET 2.0 では、コントロールを機能させるために必要なデータ (controlstate) とその他のデータ (viewstate) が区別されます。
はい、一部のコントロールは controlstate がないと機能しません。どちらが原因であるか、ビューステートに何が含まれているかを知りたい場合は、ビューステート ビューアーをチェックしてください。