さようなら、ViewState-2、またはそのベースに!
ViewState
との別の
厳しい 対決 。 今回は、SQL Serverデータベースに保存しようとします。
理論を少し繰り返します。
PageAdapterクラスがあり、その使用により、aspxページを特定のブラウザー(この場合はすべてのユーザー)に "適応"できます。 このアダプターを使用すると、ViewStateをロードおよび保存する機能をオーバーライドできます(
GetStatePersisterメソッドを使用)。
そのため、手順:
-ViewStateを保存するための単純な構造をデータベースに作成します。

(廃止された)ViewStateを取得、保存、およびクリアするためのストアドプロシージャも作成します。
-PageStatePersisterクラスを継承します。
このクラスでは、LoadメソッドとSaveメソッドを再定義して、ViewStateのロードと保存をそれぞれ実装します。
namespace SqlStatePersister
{
public class SqlPageStatePersister : PageStatePersister
{
private Page _page;
public SqlPageStatePersister( Page page)
: base (page)
{
_page = page;
}
public override void Load()
{
// ViewState
}
public override void Save()
{
// ViewState
}
}
}
* This source code was highlighted with Source Code Highlighter .
-PageAdapterクラスを継承します。このクラスでは、最初のステップで定義されたクラスのインスタンスを返すようにGetStatePersisterメソッドを再定義します。
namespace SqlStatePersister
{
public class SqlPageAdapter : PageAdapter
{
public override PageStatePersister GetStatePersister()
{
return new SqlPageStatePersister( Page );
}
}
}
* This source code was highlighted with Source Code Highlighter .
-.browserファイルを使用して、ページを「適応」します。
< browsers >
< browser refID ="Default" >
< controlAdapters >
< adapter controlType ="System.Web.UI.Page" adapterType ="SqlStatePersister.SqlPageAdapter" />
</ controlAdapters >
</ browser >
</ browsers >
* This source code was highlighted with Source Code Highlighter .
-オプションで、データベースに保存する前にgzip圧縮機能などのパンを追加します。
-廃止されたViewStateからテーブルをクリーンアップするシェダー(たとえば、SQL Serverジョブ)を作成します。
-利益!
例 (VS 2010ソリューション、.NET 4)では、
AdventureWorksデータベースを使用しています。これは、例としてNorthwindを置き換えたものです。 アプリケーションを機能させるには、appSettingsにViewStateCompress設定が必要です。これは、gzip圧縮が必要な場合は1に、不要な場合は0に設定されます。 connectionStringsセクションには、ViewStateが格納されるデータベース接続文字列も必要です(私の例では、これはソリューションからinstall.sqlスクリプトを実行することによって作成された別個のデータベースです)。
ご清聴ありがとうございました! プロジェクトに関するより詳細なコメントが必要な場合、私はあなたのサービスにいます;)
PS
非表示フォームフィールドおよび
ViewState圧縮 ではなく、データベース内のViewStateに基づいています。
Source: https://habr.com/ru/post/J109417/
All Articles