我有两个文本框和一个标签。两个文本框都具有相同的事件处理程序,对于任何文本框都是通用的。问题是,当我尝试将文本框中的两个值添加到全局变量时,我只显示最新修改文本框中的值?
两个文本框都有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();
}
}
答案 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和空字符串值。