2012-03-27 53 views
0

我想知道是否有可能从该页面上的用户控件访问页面的全局变量。.net - 从用户控件访问页面全局变量

public partial class index : System.Web.UI.Page 
    { 
    FormsIdentity id = (FormsIdentity)User.Identity; 
    string custID = "some guid"; 
    string accID = "some guid"; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
    } 

这只是一个例子,我实际的全局变量更复杂的自定义配置对象,但它应该是相同的。

我想访问用户控件中的变量。这会很有帮助,因为我需要在页面和用户控件上使用相同的对象,而且我不希望在内存中检索并存储两次。

任何人都知道是否/如何做到这一点?谢谢!

+8

由于用户控件是为了进行封装和可重用的,你应该通过他们需要放进去任何数据,没想到从其父页面发送数据(S) 。 – 2012-03-27 17:37:41

回答

2

是的,你可以。它被称为将变量传递给用户控件。确保它不止一次地存储在内存中,但这是保持关注点分离和制定可重用控制的“价格”。

如果项目是常量,您可以将它们存储为真实全局变量并通过global.asax中的静态方法进行访问。如果在请求的基础上,这不会以简单的方式工作,但您可以设计它。

现在,你不想在内存中存储两次评论。我不担心这一点,因为它是少量信息(1),尤其是因为它只会持续请求(2)。不完全如此,因为GC不会立即触发。

2

如果您依赖于多个控件上的这些信息,最好有一个从UserControl继承的UserControlBase,然后使您的控件从UserControlBase继承。对Page类做​​同样的事情。然后,您可以将该属性添加到您的BasePage。要在UserControlBase只是做参考......

protected UserInfo UserInfo 
{ 
    get 
    { 
     return ((BasePage)this.Page).UserInfo; 
    } 
}