構築され、エンコードされた ViewState の値を取得するにはどうすればよいですか?
質問
ViewState の Base64 エンコード表現を取得する必要があります。明らかに、これはリクエストのライフサイクルのかなり後半になるまで利用できませんが、これは問題ありません。
たとえば、ページの出力に次のものが含まれているとします。
<input type="hidden" name="__VIEWSTATE"
id="__VIEWSTATE" value="/wEPDwUJODU0Njc5MD...==" />
サーバー側で値を取得する方法が必要です "/wEPDwUJODU0Njc5MD...=="
明確にするために、この値はポストバック時ではなく、ページのレンダリング時に必要です。例えば実行されている ViewState 値を知る必要があります 送信済み クライアントから返される ViewState ではなく、クライアントに送信されます。
解決
レックス、まずは解決策を検討するのが良いと思います。 ViewStateを圧縮する -- 彼らはクライアントに送信される前にサーバー上の ViewState を取得し、gzip 圧縮しています。それがまさにあなたが望む場所です。
他のヒント
これを参照してください ブログ投稿 ここで著者は、ViewState を生成するためのデフォルトの動作をオーバーライドする方法を説明し、代わりにそれをサーバーの Session オブジェクトに保存する方法を示しています。
ASP.NET 2.0では、ViewStateはPagestatePersisterクラスの子孫によって保存されます。このクラスは、ViewsStateを保存およびロードするための抽象クラスであり、HiddenFieldPageStatePersisterとSessionPageStatePersisterという名前の.NETフレームワークには、このクラスの2つの実装された子孫がいます。デフォルトでは、HiddenFieldPageStatePersisterはViewState情報を保存/ロードするために使用されますが、SessionPageStatePersisterを簡単に動作させ、セッションオブジェクトでViewStateを保存できます。
私は彼のコードをテストしませんでしたが、あなたが望むものを正確に示しているようです。ポストバック前に、サーバー上にある間に ViewState コードにアクセスする方法。
上記に投稿した記事と同様の記事に従って圧縮を有効にしました。アプリケーションが ViewState を送信する前に ViewState にアクセスするための鍵は、このメソッドをオーバーライドすることでした。
protected override void SavePageStateToPersistenceMedium(object viewState)
このオーバーライド内で基本メソッドを呼び出して、ViewState を処理するために必要な追加ロジックを追加できます。