如何解决类值初始化每个回发

时间:2013-03-05 06:43:30

标签: c# asp.net postback webforms

我正在尝试将caculator写成一个网站,

我在班级中设置了2个变量来存储数字

但每次点击“+”或“ - ”按钮

变量回到初始阶段。

这是我的代码:

public partial class _Default : System.Web.UI.Page
{
    int choice = 0;
    Boolean caluOrNot = false;
    double before, after;

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Btn1_Click(object sender, EventArgs e)
    {
        if (this.caluOrNot == false)
        {
            if (txtResult.Text.ToString() == "0")
            {
                txtResult.Text = "1";
            }
            else
            {
                txtResult.Text += "1";
            }
        }
        else
        {
            txtResult.Text = "1";
        }
    }

    protected void Btn2_Click(object sender, EventArgs e)  
    protected void Btn3_Click(object sender, EventArgs e)
    protected void Btn4_Click(object sender, EventArgs e)
    protected void Btn5_Click(object sender, EventArgs e)
    protected void Btn6_Click(object sender, EventArgs e)
    protected void Btn7_Click(object sender, EventArgs e)    
    protected void Btn8_Click(object sender, EventArgs e)
    protected void Btn9_Click(object sender, EventArgs e)
    protected void Btn0_Click(object sender, EventArgs e)

    protected void BtnPoint_Click(object sender, EventArgs e)
    {
        txtResult.Text += ".";
    }

    protected void BtnJia_Click(object sender, EventArgs e)
    {
        this.choice = 1;
        this.caluOrNot = true;
        before = Double.Parse(txtResult.Text.ToString());
        txtCalu.Text = before.ToString() + "+";

    }

    protected void BtnJen_Click(object sender, EventArgs e)
    protected void BtnCheng_Click(object sender, EventArgs e)
    protected void BtnChu_Click(object sender, EventArgs e)

    protected void btnClear_Click(object sender, EventArgs e)
    {
        txtResult.Text = "0";
        this.choice = 0;
    }

    protected void btnGo_Click(object sender, EventArgs e)
    {
        double a;
        switch (this.choice)
        {
            case 1:
                a = before + after;
                txtResult.Text = a.ToString();
                break;
            case 2:
                a = before - after;
                txtResult.Text = a.ToString();
                break;
            case 3:
                a = before * after;
                txtResult.Text = a.ToString();
                break;
            case 4:
                a = before / after;
                txtResult.Text = a.ToString();
                break;
            default:
                break;
        }

    }
}

作为代码,每次点击btnJia都会触发onclick方法BtnJia_Click

选项将设置为“1”并且caculOrNot设置为true,但是当BtnJia_Click完成时,值会更改回0并返回false。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

在ASP.NET中单击BtnJia_Click时,一切都从头开始。因此,您需要在会话中存储 caculOrNot choice 的值,并在需要时从会话中读取它们。这是一个例子:

protected void BtnJia_Click(object sender, EventArgs e)
{
    this.choice = 1;
    this.caluOrNot = true;
    before = Double.Parse(txtResult.Text.ToString());
    txtCalu.Text = before.ToString() + "+";

    //Store them in Session
    Session["choice"] = this.choice;
    Session["caluOrNot"] = this.caluOrNot;
}

protected void btnGo_Click(object sender, EventArgs e)
{
    // Read them from Session when you need
    if(Session["choice"] != null)
    {
        this.choice = Convert.ToInt32(Session["choice"]);
    }

    double a;
    switch (this.choice)
    {
        case 1:
            a = before + after;
            txtResult.Text = a.ToString();
            break;
        case 2:
            a = before - after;
            txtResult.Text = a.ToString();
            break;
        case 3:
            a = before * after;
            txtResult.Text = a.ToString();
            break;
        case 4:
            a = before / after;
            txtResult.Text = a.ToString();
            break;
        default:

            break;
    }

    }
}

详细了解会话状态here