リクエスト期間のグローバル変数を設定する
-
03-07-2019 - |
質問
単一のリクエストの長さに何らかの種類のグローバル変数を設定して、ページのすべてのコントロールがそれぞれにパススルーすることなくそれに応答できるようにできますか?
たとえば、誰かが私の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;
}
}
}
所属していません StackOverflow