質問

単一のリクエストの長さに何らかの種類のグローバル変数を設定して、ページのすべてのコントロールがそれぞれにパススルーすることなくそれに応答できるようにできますか?

たとえば、誰かが私のMasterPageで[保存]ボタンを押した場合、ページ上の各UserControlが次のようなPage_Loadを持つことができるように何かを設定できますか

protected void Page_Load(object sender, EventArgs e)
{
    if (isSaving) // isSaving is a global variable
    {
        saveData();  // save myself
    }
    loadData();
}

マスターページからのデリゲートがPageの保存関数を呼び出してから、各UserControlにUC1.saveData()を呼び出すよりもはるかに簡単に思えますが、オブジェクト指向の考え方の方が優れていることがわかります。

役に立ちましたか?

解決

はい、できます。明白な場所を見てください:リクエスト処理中に常にアクセス可能なHttpContextおよび HttpContext.Current.Items コレクション( http://msdn.microsoft.com/en-us/library/system.web.httpcontext.items.aspx )。

ヒントとして

public static class RequestScopedData
{
    private const string key = "key_that_you_choose";
    public static bool IsSaving
    {
        get
        {
            object o = HttpContext.Current.Items[key];
            return Convert.ToBoolean(o);            
        }
        set
        {
            HttpContext.Current.Items[key] = value;
        }
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top