[英]Why does my variable lose its value?
從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"]);
}
}
當請求頁面時,ASP.NET創建TestingDatapass
類的實例並初始化itemprice
, totalprice
等字段。 現在,當您從客戶端更改下拉菜單時(我假設您正在查看item_selectedindexchanged
方法),將發生回發,並分配您在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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.