我刚开始学习ASP.NET,而且我遇到了获取文本框值的问题。我想做一个只有4个基本操作的简单计算器,但是当我点击+号并单击Go后,我看到我根本没有存储第一个数字。第二个数字很好。以下是我的代码示例。
public partial class deafult : System.Web.UI.Page
{
public TextBox output = new TextBox();
public double temp,tempAdd, calc;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnAdd_Click(object sender, EventArgs e)
{
tempAdd = Convert.ToDouble(output.Text);
output.Text = String.Empty;
}
//User enters another number after clicking Add button then clicks Proc
protected void proc_Click(object sender, EventArgs e)
{
temp = Convert.ToDouble(output.Text);
calc = tempAdd + temp;
output.Text = calc.ToString();
}
}
我调试了,tempAdd总是0但是我得到temp中的数字。 temp变量和calc是公共定义的。
答案 0 :(得分:1)
您基本上遇到了在页面加载时重新初始化所有变量的问题。与winforms不同,web is stateless。
然而,有一些方法可以在刷新之间保持状态。对于您的应用程序,最明显的选择是仅使用这两个值以及您要对它们执行的操作一次访问服务器。即一键式点击。
但是,对于个人启发,可能值得查看ViewState。这允许您将值存储在排序数组中,并在刷新后检索它们。
ASP.NET中还有以类似方式工作的会话和应用程序级别数组。
答案 1 :(得分:0)
每次调用页面(按事件)都会初始化所有属性。 尝试在一个事件中完成所有逻辑,或者将您的属性存储在manager / service / db中。
答案 2 :(得分:0)
在web(Asp.Net)中,每个回发属性都将被清除,尝试使用ViewState或Session变量来保存这些值。请参阅MS的Asp.Net State Management概念。
希望这可以帮助你。
答案 3 :(得分:0)
Web控件状态较少,因此您应该使用会话状态来保存第一个值然后执行您的操作...
例如: -
protected void btnAdd_Click(object sender, EventArgs e)
{
Session["tempAdd"] = output.Text;
output.Text = String.Empty;
}
protected void proc_Click(object sender, EventArgs e)
{
temp = Convert.ToDouble(output.Text);
string oldval=Session["tempAdd"] != null ?Session["tempAdd"].ToString() :"";
if(oldval!="")
tempadd=Convert.ToDouble(oldval);
calc = tempAdd + temp;
output.Text = calc.ToString();
}