2个具有相同事件的文本框重置全局变量?

时间:2014-03-26 19:46:47

标签: c# html asp.net webforms

我有两个文本框和一个标签。两个文本框都具有相同的事件处理程序,对于任何文本框都是通用的。问题是,当我尝试将文本框中的两个值添加到全局变量时,我只显示最新修改文本框中的值?

两个文本框都有AutoPostBack="True"

我在这里做错了什么?

public partial class _Default : System.Web.UI.Page
{
    int total;

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void textbox_TextChanged(object sender, EventArgs e)
    {
        TextBox tb = (TextBox)sender;

        total += int.Parse(tb.Text);

        Label1.Text = total.ToString();
    }
}

2 个答案:

答案 0 :(得分:1)

每次回发都会重置变量'total'。您可以使用事件'TextChanged'添加两个文本框。所以试试这个:

public partial class _Default : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void textbox_TextChanged(object sender, EventArgs e)
    {
        int total;        

        total = int.Parse(this.TextBox1.Text) + int.Parse(this.TextBox2.Text);

        Label1.Text = total.ToString();
    }
}

我们还应该放入try / catch块....

答案 1 :(得分:0)

由于两个文本框都有AutoPostBack="True"textbox_TextChanged处理程序在单独的回发上执行,并且因为总字段不会在ViewState或Session中持续存在,所以每个{{1}都有0个初始值}方法跑了。您需要明确地计算两个文本框中的总值,如下所示:

textbox_TextChanged

当然,最好使用TryParse方法并检查Text属性是否为null和空字符串值。