我想知道是否可以从页面上的用户控件访问页面的全局变量。
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;
}
}