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

本文关键字:全局变量 访问 用户 控件 | 更新日期: 2023-09-27 18:29:06

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

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

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

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

有人知道是否/如何做到这一点吗?谢谢

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

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

如果这些项是常量,你可以将它们存储为真正的全局变量,并通过global.asax中的静态方法进行访问。如果是基于请求,这不会以简单的方式工作,但你可以将其格式化。

现在,对于你不想在内存中存储两次评论。我不担心这一点,因为这是少量的信息(1),特别是因为它只会持续请求的持续时间(2)。不完全正确,因为GC不会立即启动。

如果您在多个控件上依赖此信息,最好有一个从UserControl继承的UserControlBase,然后使您的控件从UserControlBase继承。对Page类执行相同操作。然后可以将属性添加到BasePage中。要在您的UserControlBase中引用,只需执行…

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