.net - 从用户控件访问页面全局变量

时间:2012-03-27 17:35:07

标签: c# .net user-controls global-variables

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

 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)
    {
    }
  }

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

我想从用户控件访问变量。这将是有用的,因为我需要在页面和用户控件上使用相同的对象,我不想;我真的想要在内存中检索和存储两次。

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

2 个答案:

答案 0 :(得分:3)

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

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

现在,为了你不想在内存中存储两次评论。我不担心这个,因为它是一小部分信息(1),特别是因为它只会持续到请求的持续时间(2)。不完全正确,因为GC不会立即触发。

答案 1 :(得分:2)

如果您依赖于多个控件的这些信息,最好有一个继承自UserControl的UserControlBase,然后让您的控件继承自UserControlBase。对Page类做​​同样的事情。然后,您可以将属性添加到您的BasePage。要在UserControlBase中引用,只需执行...

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