さようならViewState!

問題



ASP.NETテクノロジの研究の最初から、ページの隠しフィールドとしてのビューステート(ViewState)の存在(または複雑なページではかなり大きなサイズ)と、サーバー要素コンテナの名前付け(ID)の2つに不愉快な驚きを覚えました。 ブラウザに表示されるすべての文字が制御されるPHPの後、これは失望でした。



まあ、私は多かれ少なかれ命名の問題に我慢しました、最後に、クラスを使用して要素のスタイルを適用できます(特にidよりも速く動作するため )、クライアントスクリプトでidを使用するには、サーバーコントロールのClientIDプロパティを表示できます。



ViewStateは抑制されなければなりませんでした:) 結局、ページサイズの50%を占めるビューステートは、クライアント最適化の観点からはあまり良くありません。 さらに、SEOの位置からページサイズを増やすためにも、そのようなページでは、すべてがバラ色ではありません。 検索エンジンの専門家でなくても、<h1>正しいテキスト</ h1>を含むページは<80kb some garbage> <h1>正しいテキスト</ h1>よりもランクが高いと仮定できます(間違っている場合は修正してください) )



何ができますか?



彼の本ASP.NET 2.0のDino Esposito。 基本コース」(13章)では、問題に対する2つの解決策を提供します。それがなくてもアプリケーションを中断しない要素のViewStateを無効にし、ビューステートをサーバーに転送します。



ViewStateをオフにすると、すべてが透明になりますが、2番目の方法を詳細に検討します。



そのため、Pageから派生したクラスを作成し、その中の2つのメソッドをオーバーライドして(SavePageStateToPersistenceMediumを保存し、LoadPageStateFromPersistenceMediumビューステートを読み込んで)、ViewStateを手動で保存/読み込みする方法を実装します。 次に、すべてのページをこのクラスから継承する必要があります。



誰にこれをやったの? ;)



自分で何かを実装する必要がなく、すでに記述されているアプリケーションコードに影響を与えない場合は、より簡単な方法があるはずです。 そして、彼のより経験豊富な同僚に目を向けると、彼はこの方法を見つけました。



バージョン2.0以降、ASP.NETはアダプターメカニズムを導入しました。 このメカニズムを使用すると、コードに影響を与えることなくコントロール(およびページ)の動作を変更できます。



ページのアダプターを作成します。

namespace Samples.AspNet.CS {



using System.Web.UI;



public class MyPageAdapter : System.Web.UI.Adapters.PageAdapter {



public override PageStatePersister GetStatePersister() {

return new SessionPageStatePersister( Page );

}

}

}




* This source code was highlighted with Source Code Highlighter .






このアダプターは、コントロールとビューステートを構成するためにWebページで使用されるオブジェクトを返すGetStatePersisterメソッドをオーバーライドします。 デフォルトでは、HiddenFieldPageStatePersister(ブラウザーの非表示フィールドにViewStateを格納)が​​使用されます。これをSessionPageStatePersister(サーバーのセッションにViewStateを格納)に変更します。



次に、アダプターをページに接続する必要があります。



App_Browsersフォルダーで、default.browserファイルを作成します。

< browsers >

< browser refID ="Default" >

< controlAdapters >

< adapter controlType ="System.Web.UI.Page" adapterType ="Samples.AspNet.CS.MyPageAdapter" />

</ controlAdapters >

</ browser >

</ browsers >




* This source code was highlighted with Source Code Highlighter .






このファイルを使用して、Pageクラスから継承したすべてのページにアダプターを接続します。



やってみます!



PS必要でない要素については、ViewStateを無効にすることをお勧めします。



使用される情報:





All Articles