我对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时,我会在表单代码中包含该对象。
答案 0 :(得分:1)
您应该将其保存在页面ViewState
中,因为这是唯一不受会话限制的基于用户的持久存储(您可以多次打开同一页面)。
this.ViewState["someVar"] = yourObject;
稍后检索:
YourClass yourObject = (YourClass)this.ViewState["someVar"];
答案 1 :(得分:0)
您是对的,每次都会加载页面,因此每次单击按钮时都会将计数器重置为零。
有很多方法可以解决这个问题,最简单的方法是使用Session [“counter”]对象存储计数器并在页面加载时重新加载。
然而,因为你是新手,我建议你放弃这种风格的asp.net,而是学习新的MVC版本
这有一种不同的方法可以避免asp.net(webforms)的许多页面生命周期问题,尽管你仍然需要将计数器存储在服务器上,或者在用户的页面响应中存储,以便可以发送它回到查询字符串,cookie或其他什么