Web を検索した結果、更新によってデータベース アクセスがトリガーされないようにする良い方法は、ViewState 変数と Session 変数を使用して状態を検出することであるという強いコンセンサスがあるようです。私のベースページクラスのコードは次のとおりです。
protected override void OnLoad( EventArgs e )
{
base.OnLoad( e );
if ( IsPostBack && ViewState["REFRESH_CHECK"] != Session["REFRESH_CHECK"] )
{
IsRefresh = true;
}
Session["REFRESH_CHECK"] = System.Guid.NewGuid().ToString();
ViewState["REFRESH_CHECK"] = Session["REFRESH_CHECK"];
}
public virtual bool IsRefresh
{
get;
private set;
}
したがって、私のページには次のようなコードがあります。
protected void Page_Load( object sender, EventArgs e )
{
if ( !IsPostBack )
{
if ( !IsRefresh )
{
doStuffThatShouldOnlyBeDoneOnce();
}
}
}
これはデバッグ中は完全に機能しますが、実稼働システムで実行すると、常に doStuff...() メソッドが 2 回呼び出されます。もちろん、デバッグするときは、呼び出しは 1 つしかありません。
関連する場合と関連しない場合がありますが、ネストされたマスターページも使用しています。
何か案は?