c# - 增加一个 int++ 不会超过 1

标签 c# .net webforms

我有 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/

相关文章:

c# - 是否可以将对象的方法发送给函数?

c++ - 64 位 Windows 上应用程序可用的最大内存是多少

c# - 尝试创建新类型时出现 InvalidProgramException

javascript - jquery asp.net 复选框列表获取项目值

c# - 如何以编程方式在 Web 窗体的 TextBox 中设置 BackColor?

php - 从同一页面上的 php 函数调用表单提交操作

c# - DateTime 按日期或小时分组

c# - AJAX 页面的 EpiServer 本地化

c# - 当方法出现歧义时,如何获取带有泛型参数的静态方法的MethodInfo?

c# - Entity Framework 和 Automapper 中的数据投影