C# 使用asp时,我将对象放在哪里

C# 使用asp时,我将对象放在哪里,c#,asp.net,visual-studio,C#,Asp.net,Visual Studio,我对C#和VS比较陌生,目前正在玩ASP.NET,但我似乎对应该将需要在webforms中使用的对象放置在何处感到非常困惑。作为一个非常基本的示例,如何添加计数器按钮?使用下面的代码,当您单击按钮时,没有任何变化,文本框仅显示计数为2'。我认为这是因为页面每次都在重新加载,因此计数器对象被“重新”实例化。那么我如何避免这种情况呢 Default.aspx Counter.cs public class Counter { public int CurrentCount { get; p

我对C#和VS比较陌生,目前正在玩ASP.NET,但我似乎对应该将需要在webforms中使用的对象放置在何处感到非常困惑。作为一个非常基本的示例,如何添加计数器按钮?使用下面的代码,当您单击按钮时,没有任何变化,文本框仅显示计数为2'。我认为这是因为页面每次都在重新加载,因此计数器对象被“重新”实例化。那么我如何避免这种情况呢

Default.aspx

Counter.cs

public class Counter
{
    public int CurrentCount { get; private set; }

    public Counter()
    {
        CurrentCount = 0;
    }


    public void CountUp()
    {
        CurrentCount++;
    }
}

我可能完全误解了这一点,但当我使用WinForms时,我会将对象包含在表单代码中。

您应该将其保存在页面中,因为这是唯一一个不受会话限制的基于用户的持久存储(您可以多次打开同一页面)

请稍后检索:

YourClass yourObject = (YourClass)this.ViewState["someVar"];

您是正确的,页面每次都在加载,因此每次单击按钮时都会将计数器重置为零

有很多方法可以解决这个问题,最简单的方法可能是使用Session[“counter”]对象来存储计数器并在页面加载时重新加载它

但是,由于您是新手,我建议您放弃这种asp.net风格,转而学习新的MVC版本


这有一种不同的方法,可以避免asp.net(webforms)的许多页面生命周期问题,尽管您仍然需要将计数器存储在服务器上,或者存储在发送给用户的页面响应中,以便可以将计数器发送回查询字符串、cookie或任何内容中。此外,请确保在页面声明中启用了ViewState。最后,如果您可以避免ViewState,请这样做-这可以使12k HTML页面变成怪物大小。在客户端使用javascript增加计数器值比使用多个服务器往返要容易得多。这是一个更好的练习模式。
public class Counter
{
    public int CurrentCount { get; private set; }

    public Counter()
    {
        CurrentCount = 0;
    }


    public void CountUp()
    {
        CurrentCount++;
    }
}
this.ViewState["someVar"] = yourObject;
YourClass yourObject = (YourClass)this.ViewState["someVar"];