我想知道是否可以从该页面上的用户控件访问页面的全局变量。
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)
{
}
}
这只是一个例子,我的实际全局变量是更复杂的自定义配置对象,但它应该是相同的。
我想从用户控件访问变量。这将是有用的,因为我需要在页面和用户控件上使用相同的对象,我不想;我真的想要在内存中检索和存储两次。
任何人都知道是否/如何做到这一点?谢谢!
答案 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;
}
}