为什么我的变量失去了它的值
本文关键字:失去 我的 变量 为什么 | 更新日期: 2023-09-27 18:18:01
从selectedindexchanged
事件开始,我的变量有一个值,但是当它到达btn_click()
事件时,变量不再有值。为什么呢?
public partial class TestingDatapass
{
private string item = null;
private string itemprice = null;
private int totalprice = 0;
protected void item_selectedindexchanged(object sender, EventArgs e)
{
//Both have a value here
item = item.SelectedValue;
itemprice = item.SelectedValue.Text;
}
protected void btn_click(object sender, EventArgs e)
{
//no value here
totalprice = Convert.ToInt32(itemprice)*Convert.ToInt32(item);
MessageBox.Show(totalprice);
}
}
编辑
如何回答?在评论中提出,出现的顺序是selectedindexchange
然后是btn_click()
EDIT about View State
那么这是一种合适的方式来实现我想要实现的目标吗?
public partial class TestingDatapass
{
private int totalprice = 0;
protected void item_selectedindexchanged(object sender, EventArgs e)
{
ViewState["item"] = item.SelectedValue;
ViewState["itemprice"] = item.SelectedValue.Text;
}
protected void btn_click(object sender, EventArgs e)
{
totalprice = Convert.ToInt32(ViewState["item"])*Convert.ToInt32(ViewState["itemprice"]);
}
}
当一个页面被请求时,ASP. NET创建TestingDatapass
类的实例并初始化itemprice
, totalprice
等字段。现在,当您从客户端更改下拉菜单时(我假设查看您的item_selectedindexchanged
方法),Postback发生并分配您在item_selectedindexchanged
中提到的值。最后,它销毁实例,生成html并将其发送回浏览器。
现在,当您按下页面中的按钮时,将创建一个新实例,您的字段将被重新初始化,并且您不会在btn_click
中看到更改的值。这就是它的工作原理。
因此,如果您希望在回发期间保留任何数据,请考虑使用任何状态管理技术,如ViewState, HiddenField
等。
另外,作为旁注,MessageBox.Show
在ASP.NET中不可用。
更新:
我回答了为什么它不保留按钮点击事件的值,有很多方法可以做到这一点。但是要回答你的问题,我看不出有任何理由在item_selectedindexchanged
事件中存储值,因为你没有在那里做任何事情。你可以像这样直接访问按钮点击处理程序中的下拉选择值:-
protected void btn_click(object sender, EventArgs e)
{
totalprice = Convert.ToInt32(item.SelectedValue) *
Convert.ToInt32(item.SelectedItem.Text);
}
还有,请注意是item.SelectedItem.Text
而不是SelectedValue.Text
。