31

base64-encodedの表現を取得する必要がありViewStateます。明らかに、これはリクエストのライフサイクルのかなり遅い時間まで利用できません。これは問題ありません。

たとえば、ページの出力に次のものが含まれている場合:

<input type="hidden" name="__VIEWSTATE" 
  id="__VIEWSTATE" value="/wEPDwUJODU0Njc5MD...==" />

値を取得するためのサーバー側の方法が必要です"/wEPDwUJODU0Njc5MD...=="

明確にするために、PostBackではなく、ページがレンダリングされているときにこの値が必要です。たとえば、クライアントから返されるViewStateではなく、クライアントに送信されているViewState値を知る必要があります。

4

3 に答える 3

13

Rex さん、 ViewState を圧縮するソリューションから始めるのが良いと思います。クライアントに送信される前に、サーバー上で ViewState を取得して gzip 圧縮しています。それはまさにあなたがなりたい場所です。

于 2008-08-04T08:04:41.737 に答える
4

このブログ投稿を参照してください。著者は、ViewState を生成するための既定の動作をオーバーライドする方法を説明し、代わりにそれをサーバーの Session オブジェクトに保存する方法を示しています。

ASP.NET 2.0 では、ViewState は PageStatePersister クラスの子孫によって保存されます。このクラスは、ViewsState を保存およびロードするための抽象クラスであり、.Net Framework には、HiddenFieldPageStatePersister および SessionPageStatePersister という名前のこのクラスの 2 つの実装された子孫があります。デフォルトでは、HiddenFieldPageStatePersister は ViewState 情報の保存/読み込みに使用されますが、SessionPageStatePersister を簡単に機能させて ViewState を Session オブジェクトに保存できます。

私は彼のコードをテストしませんでしたが、ポストバックの前に、サーバー上にある間に ViewState コードにアクセスする方法を正確に示しているようです。

于 2008-08-04T09:04:17.997 に答える
2

上記の記事と同様の記事に従って圧縮を有効にしました。アプリケーションがViewStateを送信する前にViewStateにアクセスするための鍵は、このメソッドをオーバーライドすることでした。

protected override void SavePageStateToPersistenceMedium(object viewState)

このオーバーライド内でbaseメソッドを呼び出してから、ViewStateを処理するために必要なロジックを追加できます。

于 2008-08-05T10:07:51.847 に答える