さようなら、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