布尔不工作ASP.Net

时间:2016-03-18 17:52:34

标签: c# asp.net

我正在尝试制作一个简单的计算器。 bttn_Click()中的布尔值无法正常工作。计算器应该接收值,然后在按下操作时重置。相反,计算器继续将数字附加到文本框中的值。因此,bttnEquals_Click()也不起作用。我尝试在文本框中添加不同的值,并确定布尔值是罪魁祸首。这个逻辑有问题吗? TIA

C#文件

public partial class WebForm1 : System.Web.UI.Page
{
    Boolean op_pressed = false;
    String operation = "";
    Double result = 0.0;

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void bttn_Click(object sender, EventArgs e)
    {
        if (op_pressed)
        {
            txtDisplay.Text = String.Empty;
        }
        Button b = (Button)sender;
        txtDisplay.Text += b.Text;
    }

    protected void bttnClear_Click(object sender, EventArgs e)
    {
        txtDisplay.Text = string.Empty;

    }

    protected void bttnOperation_Click(object sender, EventArgs e)
    {
        op_pressed = true;
        Button b = (Button)sender;
        operation = b.Text;
        result = Double.Parse(txtDisplay.Text);
    }

    protected void bttnEquals_Click(object sender, EventArgs e)
    {
        switch(operation)
        {
            case "+":
                txtDisplay.Text = (result + Double.Parse(txtDisplay.Text)).ToString();
                break;
            case "-":
                txtDisplay.Text = (result - Double.Parse(txtDisplay.Text)).ToString();
                break;
            case "*":
                txtDisplay.Text = (result * Double.Parse(txtDisplay.Text)).ToString();
                break;
            case "/":
                txtDisplay.Text = (result / Double.Parse(txtDisplay.Text)).ToString();
                break;
            default:
                break;
        }
        op_pressed = false;
    }
}

}

3 个答案:

答案 0 :(得分:2)

它确实可以帮助您在ASP.NET中每次回发时都没有正确使用它重新加载页面,因此它会在您必须使用View State

的情况下将变量重置为原始值

Understanding ASP.NET View State

类似于ViewState["op_pressed"] = true;

答案 1 :(得分:0)

您没有在viewstate或其他任何地方保存op_preessed的值,因此每次单击按钮时,它都将为false。这就是为什么bttn_Click没有清除文本。解决问题的简便方法是立即在bttnOperation_Click;

中清除文本框
protected void bttnOperation_Click(object sender, EventArgs e)
{
    op_pressed = true;

    txtDisplay.Text = String.Empty;

    Button b = (Button)sender;
    operation = b.Text;
    result = Double.Parse(txtDisplay.Text);
}

答案 2 :(得分:0)

您不能将状态存储在Page类中的变量中,并期望它们在HTTP请求之间完整可用。根据你想要做的事情,我只能假设你正在学习,这很好(否则,你的计算器解决方案,在架构上,并不好;但是,让&# 39;继续,无论如何;我不批评)。

这是因为,在这些点击事件之间,您有服务器向浏览器提供HTML,而它没有维护(记住)状态(结果,操作等)。为了使它“记住”#34;状态(再次,使用您的架构),您可以使用" ASP.NET Session"。

因此,例如,要在会话中存储内容:

this.Session["op_pressed"] = true;

然后,回读先前存储的值:

object value = this.Session["op_pressed"];
// you cannot assume it exists; it may be NULL
// so, cast (convert) to type that you believe it to be
// e.g:
bool pressed;
bool worked = bool.TryParse(this.Session["op_pressed"], out pressed);
if(!worked)
{
   pressed = false; // default; first-time
}

// process "pressed" here

换句话说,将这些变量移到"会话":

Boolean op_pressed = false;
String operation = "";
Double result = 0.0;