访问来自不同代码隐藏类的变量



EDIT: made variables not static.

我在代码隐藏类中有一个变量,想从另一个类访问它。

下面是"注册"的c#代码页面:

public partial class Webform_Signup : System.Web.UI.Page
{
private string user;
public string User
{
get { return user; }
set { user = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
if(HttpContext.Current.Request["submit"] != null)
{
user = HttpContext.Current.Request["user"];
Response.Redirect("Login.aspx");
}
}
}

下面是。aspx类中另一个隐藏代码类的代码"Login":

public partial class Webform_Login : System.Web.UI.Page
{
public string loguser = "";
protected void Page_Load(object sender, EventArgs e)
{
if(HttpContext.Current.Request["logsubmit"] != null)
{
loguser = HttpContext.Current.Request["loguser"];
if (loguser == Webform_signup.User)
{
Response.Redirect("Start");
}
}
}
}

问题是,当我试图访问Webform_signup.user时,它显示一个错误说:

Webform_Signup名称在当前上下文中不存在。

有谁知道怎么修理它吗?

最简单的方法(可能不是最好的方法)是将它放在会话变量中,然后从那里读取它。

public partial class Webform_Signup : System.Web.UI.Page
{
private string user;
public string User
{
get { return user; }
set { user = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
if(HttpContext.Current.Request["submit"] != null)
{
user = HttpContext.Current.Request["user"];
HttpContext.Current.Session["user"] = user; //Save to session
Response.Redirect("Login.aspx");
}
}
}
public partial class Webform_Login : System.Web.UI.Page
{
public string loguser = "";
protected void Page_Load(object sender, EventArgs e)
{
if(HttpContext.Current.Request["logsubmit"] != null)
{
loguser = HttpContext.Current.Request["loguser"];
var user = HttpContext.Current.Session["user"]; //Read from session
if (loguser == user)  
{
Response.Redirect("Start");
}
}
}
}

这当然是假设你已经启用了会话状态。

您需要牢记生命周期。你忽略了它们,在这种情况下,结果将是灾难性的。

当你声明一个变量为静态时,在你的应用程序中只有一个该变量的实例。这意味着无论用户使用你的应用程序,webform_sign。用户字段将被共享。这可能导致用户访问其他用户的信息!这真是太糟糕了。

同样,页类不应该引用其他页类。一个页面只有在用户正在访问时才存在。

如果你想登录一个用户,那么也许你应该研究一下表单认证。或者更好的是,学习像ASP这样的现代框架。. NET Core MVC代替Web Forms,这是一个僵死的平台。

最新更新