从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()
关于查看状态的编辑
那么这将是建立我想要实现的目标的正确方法吗?
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"]);
}
}
答案 0 :(得分:1)
当请求页面时,ASP.NET会创建 protected void showDialog(final DialogFragment diag)
{
cancelDialog();
if (diag != null && !diag.isAdded())
diag.show(getSupportFragmentManager().beginTransaction(), "dialog");
}
类的实例并初始化TestingDatapass
,itemprice
等字段。现在,当您更改客户端的下拉列表(我假设查看您的totalprice
方法)时,会发生回发并分配您在item_selectedindexchanged
中提到的值。最后,它会销毁实例,生成html并将其发送回浏览器。
现在,当您按下页面中的按钮时,会创建一个新实例,您的字段会重新初始化,并且您无法在item_selectedindexchanged
中看到更改后的值。这是它的工作原理。
因此,如果您想要在回发中保留任何数据,请考虑使用btn_click
之类的任何State Management技术。
另外,作为旁注,ASP.NET中没有ViewState, HiddenField
。
<强>更新强>
我回答了为什么它没有保留按钮点击事件中的值,有很多方法可以做到这一点。但是要回答你的问题,我没有看到任何理由将值存储在MessageBox.Show
事件中,因为你没有在那里做任何事情。您可以直接访问按钮单击处理程序中的下拉列表选定值,如下所示: -
item_selectedindexchanged
另外,请注意protected void btn_click(object sender, EventArgs e)
{
totalprice = Convert.ToInt32(item.SelectedValue) *
Convert.ToInt32(item.SelectedItem.Text);
}
而非item.SelectedItem.Text
。