在asp.net应用程序中将全局变量共享给一个类

时间:2014-10-29 11:04:36

标签: c# asp.net

我正在开发一个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”,我不明白。有人有解决方案吗?

提前感谢您的帮助。

6 个答案:

答案 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)

正如本·罗宾逊所说,你必须在某个地方保持这种价值。 一种简单的方法是使用Session:

  1. 创建" const字符串"类中的变量用于保存会话索引,如:

    const string MY_PROPERTY =" MyProperty";

  2. 然后每当你想存储或读取值时使用:

    //来存储 Session [Home.MY_PROPERTY] = int.parse(Session [Home.MY_PROPERTY])+ 1; //阅读 int myVariable = int.parse(Session [Home.MY_PROPERTY])

  3. 你也可以在你的班级中创建一个属性,如:

    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)