是否可以在C#中使用全局变量?我来自主要是PHP背景,所以变量可以在任何地方访问,或只是global
定义。
我的主要问题是我有一个User
类,我自己编写了这个类来包装我公司数据库中的当前users
表。我在MasterPage中定义它但似乎无法从实际页面访问它(我不知道是否有更好的词来描述它们,但它们是从MasterPage继承样式和格式的页面)
我的任何一般提示或实施方法?
编辑:这是我正在尝试做的一些代码片段:
Site.master.cs
public partial class SiteMaster : System.Web.UI.MasterPage
{
public User user = new User();
}
logout.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="logout.aspx.cs" Inherits="logout" %>
<%@ MasterType virtualPath="~/Site.master"%>
logout.aspx.cs
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
User user = Master.user;
}
}
答案 0 :(得分:4)
C#是为面向对象编程而设计的。如果您还没有使用面向对象范例编写程序,那么在开始之前可能有点难以切换到它。 OOP(http://en.wikipedia.org/wiki/Object-oriented_programming)建立在三个主要概念上:继承,多态和封装。
您可以定义分类的页面/主页,最好在App_Code文件夹中定义它们。
答案 1 :(得分:2)
拥有一个公共静态类并声明公共静态成员变量。
当我需要一些全局变量时,这就是我所做的,尽管我尽量避免使用它们。
答案 2 :(得分:2)
如果Page
继承自MasterPage
,则会在User
中保护MasterPage
属性,并且Page
会显示该属性。
答案 3 :(得分:2)
通过在.aspx页面中设置MasterPageClass,可以访问使用它的页面的主页面类:
<%@ MasterType TypeName="MyTypeName" VirtualPath="~/MasterPageName.master" %>
听起来我可能只需要将您的代码放在稍微不同的地方。您可以通过独立类访问典型的User类,而不是捆绑到母版页或主类型中。
我可能会建议您将User类添加到项目的/ AppCode目录中的新类文件中(User.cs)。这样您就可以从页面访问它,而无需使用MasterType。
答案 4 :(得分:1)
请参阅我对 this 问题的回答。响应发送到浏览器后,非静态类级变量不会保留。这是因为每个Page对象都是该类的新实例,而不是上一次请求的实例。
使用“Session”属性,而不是我在链接中显示的内容。
答案 5 :(得分:1)
您的问题是从您的页面获取存储在母版页中的数据(假设我们在这里谈论ASP.Net MasterPage机制)?
如果是这样,你应该看看strongly-typed access to masterpages。基本上,您所做的是在MasterPage类中创建一个公共属性。然后,在您的Page中,声明MasterPageFile和MasterType,如下所示:
public partial class MasterPage
{
public User CurrentUser{...}
}
在您的aspx页面中,声明使用母版页以及要使用的主类型。
<%@ Page masterPageFile="~/MasterPage.master"%>
<%@ MasterType virtualPath="~/MasterPage.master"%>
然后,您就可以在页面类中访问该属性,如下所示:
var user = Master.CurrentUser;
然后,有关初始化CurrentUser
对象的位置的问题,请查看the list of page lifecycle events。如您所见,MasterPage.Init在之前触发 .Init和MasterPage.Load在 Page.Load之前触发。您可以使用MP.Init或MP.Load来确保数据在页面事件触发时已准备就绪,但首选Init。
答案 6 :(得分:0)
至少有几种不同的方法可以达到你想要的效果:
使用Application object - 它可用于存储全局内容,是ASP.Net的一部分。
使用static classes - 这是创建单身人士的另一种选择。