我正在开发一个asp.net应用程序。我有一个名为“home.aspx”的页面,其中包含2个名为“button1”和“button2”的按钮。每个按钮都有一个onclick方法,分别称为“Button1_click”和“Button2_click”。我的目标是在这两个方法之间共享一个公共变量,所以基本上我尝试将一个属性添加到与我的页面关联的类中,如下所示:
public partial class Home : Syste.Web.UI.Page
{
private int myproperty=0;
protected void Button1_Click(object sender, EventArgs e)
{
myproperty++;
}
protected void Button2_Click(object sender, EventArgs e)
{
myproperty++;
}
}
使用此代码,我认为只有在我第一次加载并进入页面时才会调用“private int myproperty = 0”。然后,当我在页面上时,如果我点击button1或button2,myproperty将只增加一个。但是当我调试时,我看到每次单击button1或button2时,再次调用“private int myproperty = 0”,我不明白。有人有解决方案吗?
提前感谢您的帮助。
答案 0 :(得分:1)
在ASP.NET中,如果要使用全局变量,则必须使用Session
对象(如果每个用户的变量都不同,例如计算用户单击Button的次数)或Application
对象(如果变量对所有用户都是通用的,例如计算用户访问您网站的数量)。
示例:
//Set variable
Session["myVariable"] = value
//Get variable
var myVariable = Session["myVariable"]
Application
的语法相同,只需将Session
替换为Application
答案 1 :(得分:0)
制作变量static
喜欢这个
public partial class Home : Syste.Web.UI.Page
{
private Static int myproperty;
protected void Button1_Click(object sender, EventArgs e)
{
//You can access myproperty here (same copy)
}
protected void Button2_Click(object sender, EventArgs e)
{
//You can access myproperty here (same copy)
}
}
答案 2 :(得分:0)
您可以使用以下会话
private int Count
{
get
{
if (Session["Count"] == null)
{ Session["Count"] = 0; return 0; }
else
return (int)Session["Count"] ;
}
set
{
Session["Count"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
Count = 0;
}
protected void Button1_Click(object sender, EventArgs e)
{
Count++;
}
protected void Button2_Click(object sender, EventArgs e)
{
Count++;
}
答案 3 :(得分:0)
您想如何分享变量myproperty的值?
- 如果您想在每个窗口重用myproperty
的值,则需要将值存储在vewstate中:http://msdn.microsoft.com/en-us/library/ms227551%28v=vs.85%29.aspx
另一种方法是使用隐藏文件的asp.net webcontrol来存储值。
- 如果要重用会话值,可以将值存储在会话中(Session [“myproperty”])
- 如果您想与所有用户共享该值,您可以使用该应用程序:http://msdn.microsoft.com/en-us/library/94xkskdf%28v=vs.100%29.aspx
答案 4 :(得分:0)
创建" const字符串"类中的变量用于保存会话索引,如:
const string MY_PROPERTY =" MyProperty";
然后每当你想存储或读取值时使用:
//来存储 Session [Home.MY_PROPERTY] = int.parse(Session [Home.MY_PROPERTY])+ 1; //阅读 int myVariable = int.parse(Session [Home.MY_PROPERTY])
你也可以在你的班级中创建一个属性,如:
const string MY_PROPERTY = "MyProperty";
public int MyProperty
{
get
{
if (Session[Home.MY_PROPERTY] == null)
{
return 0;
}
else
{
int iValue = 0;
if (int.TryParse(Session[Home.MY_PROPERTY].ToString(), out iValue))
return iValue;
else
return 0;
}
}
set
{
Session[Home.MY_PROPERTY] = value;
}
}
答案 5 :(得分:0)
在增量之前,只有回发检查才能解决问题。 在增加之前添加以下代码。
if(!IsPostBack)