我有 3 个整数,它们应该在单击按钮时递增,然后它们的值被转换为字符串并在对应的标签上更新,但它们不会递增超过 1。
public partial class MainPage : System.Web.UI.Page
{
Random rd = new Random();
int oneint = 0;
int twoint = 0;
int threeint = 0;
protected void Button1_Click(object sender, EventArgs e)
{
int rn = rd.Next(1, 1000);
if (rn > 1 && rn < 50)
{
Label1.Text = "3";
threeint++;
threelbl.Text = threeint.ToString();
}
if (rn > 50 && rn < 500)
{
Label1.Text = "2";
twoint++;
twolbl.Text = twoint.ToString();
}
if (rn > 500 && rn < 1000)
{
Label1.Text = "1";
oneint++;
onelbl.Text = oneint.ToString();
}
}
这是一个 ASP.NET webforms 网页。有人看到我哪里出错了吗?
最佳答案
即使您将变量初始化为全局变量,除非它们以某种方式持久化,否则它们仍将重置为零。
有几种方法可以做到这一点。
- 你可以创造
<asp:hidden runat="server">
元素并将值存储在其中。这可能是最简单的。 - 您可以在
PreRender
期间将值存储在 ViewState 中事件并在Load
中再次检索它们事件。
在这两种情况下,确保将值输出到页面,这意味着它们将通过任何回发事件发送回服务器。为简单起见,我只使用隐藏的表单元素。但是如果有任何类型的复杂数据,那么我
- 创建一个包含值的类,并将其标记为可序列化
- 将该类放入一个全局变量中
- 从
Load
中的 ViewState 恢复变量事件 将其保存在
PreRender
中事件。public partial class MainPage : System.Web.UI.Page { Random rd = new Random(); private PageState _pageState; protected void Page_Load(object source, EventArgs e) { _pageState = ViewState["pageState"] as PageState ?? new PageState(); } protected void Page_PreRender(object sender, EventArgs e) { ViewState["pageState"] = _pageState; } protected void Button1_Click(object sender, EventArgs e) { int rn = rd.Next(1, 1000); if (rn > 1 && rn < 50) { Label1.Text = "3"; _pageState.threeint++; threelbl.Text = _pageState.threeint.ToString(); } if (rn > 50 && rn < 500) { Label1.Text = "2"; _pageState.twoint++; twolbl.Text = _pageState.twoint.ToString(); } if (rn > 500 && rn < 1000) { Label1.Text = "1"; _pageState.oneint++; onelbl.Text = _pageState.oneint.ToString(); } } } [Serializable] public class PageState { public int oneint { get; set; } public int twoint { get; set; } public int threeint { get; set; } }
关于c# - 增加一个 int++ 不会超过 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36250350/