さようなら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を無効にすることをお勧めします。

使用される情報:

Source: https://habr.com/ru/post/J60170/


All Articles