10

セッション中の特定のページのビューステートを維持したいのですが、次のコード ブロックでは役に立ちません。何が欠けているのでしょうか?

これが私のページのコード ビハインド ファイルの内容です。

    public partial class ConfigurationEditorWebForm : PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }

        protected override bool VerifyAccess()
        {
            return true;
        }

        protected override PageStatePersister PageStatePersister
        {
            get
            {
                return new SessionPageStatePersister(this);
            }
        }
    }
4

4 に答える 4

9

ページ状態をビュー状態に移動した後でも、ページには __Viewstate 要素が表示されることに注意してください。

また、このソリューションは、戻るボタンをもう少しエレガントに処理するため、他のソリューションよりも正しいと思います。ViewState を非表示の変数に保存すると、それは HTML の一部になるため、ユーザーが戻るボタンを 2 ページまたは 3 ページクリックして元の操作を続行した場合に使用できます。各ページ リクエストで Viewstate をやみくもに破棄すると、[戻る] ボタンがユーザーの期待どおりに動作しなくなります。

ただし、そもそもこれはおそらく優れたアイデアではないことに注意してください。最初に少なくとも次の 2 つのことを行うことをお勧めします。

最初に、Viewstate を必要としないすべてのコントロール (おそらくほとんどのコントロール) で Viewstate をオフにしていることを確認します。これを行うには、'IsViewstateEnabled' を false に設定します。

次に、Web サーバーで http 圧縮をオンにします。適切なサイズのビューステートがある場合でも、ページの総重量 (圧縮された場合 -ブラウザーで表示される場合ではありません) は比較的小さいはずです。

それが役立つことを願っています!

于 2009-01-28T02:34:23.507 に答える
4

ViewState 非表示フィールドに表示されるのは、「通常の」ViewState とは異なる方法で格納されている ControlState です。

ControlState もセッションに保存するには、次のエントリを web.config ファイルに追加します。

  <system.web>
    <browserCaps>
      <case>
        RequiresControlStateInSession=true
      </case>
    </browserCaps>
  </system.web>

詳細については、このページを確認してください。

于 2009-02-03T17:29:43.627 に答える
3

コードの重要な部分は

protected override PageStatePersister PageStatePersister
{
    get
    {
        return new SessionPageStatePersister(this);
    }
}

これは通常のページ状態パーシスターをオーバーライドし、ViewStateの代わりにページデータをセッションに永続化するパーシスターを提供します。

于 2009-01-27T18:39:43.637 に答える
3

私の答えはおそらくあなたが望むものではありませんが、最後の手段として、このようなことをしなければならないかもしれません.

https://connect.microsoft.com/VisualStudio/feedback/Workaround.aspx?FeedbackID=240686で説明されているリフレクション ロックを適用し、独自のインプロセス セッション マネージャーを構築して、そこにすべてのセッション データを保存しました。

WYSIWYG ビルダーが貧弱な HTML を生成することを発見した後、Response.Write を使用してすべての HTML を手動で記述することに切り替えました。

もう問題はありません。大変な作業でしたが、やりがいがありました。

編集: すべての Web フォームを無視するという考えが気に入らないため、0 未満の公正な反対投票はありません。ツールがうまくいかないときは、それらを使用しません。ツールが機能せず、機能させることができない場合は、それらも使用しないでください。

于 2009-01-28T02:58:11.680 に答える