Asp.net 在WebApp中使用静态成员
我有这个密码Asp.net 在WebApp中使用静态成员,asp.net,Asp.net,我有这个密码 //file Globals.cs in App_Code folder public class Globals { public static string labelText = ""; } 还有一个简单的aspx页面,它有文本框、标签和按钮。代码文件是: public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArg
//file Globals.cs in App_Code folder
public class Globals
{
public static string labelText = "";
}
还有一个简单的aspx页面,它有文本框、标签和按钮。代码文件是:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = Globals.labelText;
}
protected void Button1_Click1(object sender, EventArgs e)
{
Globals.labelText = TextBox1.Text;
}
}
当我单击按钮时,Globals.labelText变量将从文本框中初始化;问题是:为什么当我在另一个浏览器中打开此页面时,标签会有我在第一个浏览器中设置的值,即静态成员对于每个用户都是通用的。我认为每个请求都在由IIS进程的单个副本创建的单个appDomain中提供。WTF 否,在这种情况下,静态仅在请求所在的流程的生命周期内是静态的。因此,在处理单个请求的整个过程中,这个变量都是静态的。为了以您描述的方式拥有一个“静态”变量,您必须将其设置为应用程序变量。大概是这样的:
//file Globals.cs in App_Code folder
public class Globals
{
// I really recommend using a more descriptive name
public static string LabelText
{
get
{
return Application("LabelText") ?? string.Empty;
}
set
{
Application("LabelText") = value;
}
}
}
通过使其成为应用程序变量,它应该能够经受多个页面请求。不过,它有一个漏洞,即它无法在应用程序池循环中生存,对于大型应用程序来说,这可能会有问题。如果您确实希望此变量以静态方式可靠地运行,那么最好将其状态存储在某个数据库中。否,在本例中,静态仅在请求所在的流程的生命周期中是静态的。因此,在处理单个请求的整个过程中,这个变量都是静态的。为了以您描述的方式拥有一个“静态”变量,您必须将其设置为应用程序变量。大概是这样的:
//file Globals.cs in App_Code folder
public class Globals
{
// I really recommend using a more descriptive name
public static string LabelText
{
get
{
return Application("LabelText") ?? string.Empty;
}
set
{
Application("LabelText") = value;
}
}
}
通过使其成为应用程序变量,它应该能够经受多个页面请求。不过,它有一个漏洞,即它无法在应用程序池循环中生存,对于大型应用程序来说,这可能会有问题。如果您确实希望此变量以静态方式可靠运行,那么最好将其状态存储在某个数据库中。是的,您可以使用静态变量存储应用程序范围的数据,但它不是线程安全的。将
应用程序
对象与锁定
和解锁
方法一起使用,而不是使用静态变量
看一看,您可以使用静态变量存储应用程序范围的数据,但它不是线程安全的。将
应用程序
对象与锁定
和解锁
方法一起使用,而不是使用静态变量
查看并为什么不将此labelText添加到会话中?会话到期时它将被销毁,并且不会在用户之间共享…@emaster70我想问:为什么静态成员在用户之间共享?我也可以在viewstate中保存此值,但问题不在于此,为什么不将此labelText添加到会话中?会话到期时它将被销毁,并且不会在用户之间共享…@emaster70我想问:为什么静态成员在用户之间共享?我也可以在viewstate中保存该值,但问题不在于此