2009-01-02 46 views
6

Tôi có thể đặt một số biến toàn cục cho độ dài của một Yêu cầu duy nhất không, để tất cả các điều khiển của trang có thể phản hồi mà không phải chuyển nó qua từng phần?Đặt Biến Toàn cầu cho Thời lượng của Yêu cầu

Ví dụ, nếu một người nào đó nhấn nút Save trên MasterPage của tôi, tôi có thể thiết lập một cái gì đó để mỗi UserControl trên trang của tôi có thể có một Page_Load như:

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

Nó chỉ có vẻ dễ dàng hơn rất nhiều so với việc có một delegate từ masterpage gọi hàm Save của trang, sau đó gọi UC1.saveData() cho mỗi UserControl, mặc dù tôi biết đó là suy nghĩ hướng đối tượng tốt hơn.

Trả lời

21

Có, bạn có thể. Nhìn vào địa điểm rõ ràng: HttpContext và bộ sưu tập HttpContext.Current.Items luôn có thể truy cập được trong quá trình xử lý yêu cầu (xem http://msdn.microsoft.com/en-us/library/system.web.httpcontext.items.aspx).

Cũng giống như một gợi ý:

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; 
     } 
    } 
} 
+1

+1 cho gói nó trong một lớp tùy chỉnh để tập trung tên chính –

+0

Cảm ơn rất nhiều - đây là siêu hữu ích. –

Các vấn đề liên quan