問題
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を無効にすることをお勧めします。
使用される情報: