onClick动作后为空

时间:2015-06-10 18:16:33

标签: asp.net

我从asp.net开始,但我不太确定我做错了什么。实际上我在asp的第一步就是制作一个计算器,但在寻找答案2小时后我决定问你这个问题。

我有10个按钮[0,1,2 ... 9],4个动作按钮[+, - ,*,/]和一个按钮来计算[=]:

int firstNumber, secondNumber;
        Button lastClicked;
        bool isFirstNumberSet;

        protected void Page_Load(object sender, EventArgs e)
        {
            firstNumber = 0;
            isFirstNumberSet = false;
            lastClicked = new Button();

        }

        public void addToTextbox(object sender, EventArgs e)
        {
            Button number = (Button)sender;
            TextBox1.Text += number.Text;
        }

        public void doSomething(object sender, EventArgs e)
        {
            if (isFirstNumberSet.Equals(false)) firstNumber = int.Parse(TextBox1.Text);
            else secondNumber = int.Parse(TextBox1.Text);
            lastClicked = new Button();
            lastClicked = (Button)sender;
            isFirstNumberSet = true;
            TextBox1.Text = "";
        }

        public void calculate(object sender, EventArgs e)
        {

            switch (lastClicked.ID)
            {
                case "ButtonPlus":
                    TextBox1.Text = (firstNumber + secondNumber).ToString();
                    isFirstNumberSet = false;
                    break;

                case "ButtonMinus":
                    TextBox1.Text = (firstNumber - secondNumber).ToString();
                    isFirstNumberSet = false;
                    break;

                case "ButtonDziel":
                    TextBox1.Text = (firstNumber / secondNumber).ToString();
                    isFirstNumberSet = false;
                    break;

                case "ButtonMnoz":
                    TextBox1.Text = (firstNumber * secondNumber).ToString();
                    isFirstNumberSet = false;
                    break;
}

但是当我做2 + 2之类的动作时,之后我点击了“=”。我对该代码有例外:

切换(lastClicked.ID)

它说lastClicked是null,但是怎么样?点击“+”后,这应该将发件人对象保存到此变量。我错了吗?

1 个答案:

答案 0 :(得分:1)

您的按钮变量分配不会以您期望的方式在回发之间保留。当calculate触发你的“=”键时,lastClicked现在在这个新的“往返”中被取消分配,因此无效。当您按下一个按钮一次,然后按下第二个按钮时,除了将值存储在发送回服务器的数据中捕获的字段中之外,没有上一个命中的记忆。

您可以探索的一种方法是将已选择的操作存储到表单上的隐藏HTML字段中,然后在点击计算例程时查询该字段。这样就无需尝试持久保存“lastClicked”按钮。

在您的aspx中,在您的表单中,您可以添加:

<asp:HiddenField id="Operation" runat="server" />

然后,在你的代码隐藏中响应你的一个操作员按钮:

Operation.Value = "Plus";  // or "+" or whatever is appropriate

然后在下一次旅行中将其发送回客户端,然后在响应“=”按钮单击时调用calculate方法时将其作为发送回服务器的数据的一部分:

 public void calculate(object sender, EventArgs e){

      switch(Operation.Value){
           case "Plus";
              // do the "PLUS" thing
              // and so on

      ... (snip)...
}