使用asp时我在哪里放置对象

时间:2015-03-06 13:59:21

标签: c# asp.net visual-studio

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

的Default.aspx ...

<asp:Button ID="bttnCounter" runat="server" Text="Click Me" OnClick="ButtonClick"/>

...

Default.aspx.cs

public partial class _Default : Page
{

    Counter counter = new Counter();

    protected void Page_Load(object sender, EventArgs e)
    {
        bttnCounter.Click += new EventHandler(this.ButtonClick);
    }

    public void ButtonClick(Object sender, EventArgs e)
    {
        counter.CountUp();
        output.Text = "The count is " + counter.CurrentCount;
    }
}

Counter.cs

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

    public Counter()
    {
        CurrentCount = 0;
    }


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

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

2 个答案:

答案 0 :(得分:1)

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

this.ViewState["someVar"] = yourObject;

稍后检索:

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

答案 1 :(得分:0)

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

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

然而,因为你是新手,我建议你放弃这种风格的asp.net,而是学习新的MVC版本

这有一种不同的方法可以避免asp.net(webforms)的许多页面生命周期问题,尽管你仍然需要将计数器存储在服务器上,或者在用户的页面响应中存储,以便可以发送它回到查询字符串,cookie或其他什么