7

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

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

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

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

4

1 に答える 1

23

はい、できます。明らかな場所を見てください: 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;
        }
    }
}
于 2009-01-02T20:36:03.770 に答える