簡體   English   中英

為什么我的變量失去價值?

[英]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類的實例並初始化itempricetotalprice等字段。 現在,當您從客戶端更改下拉菜單時(我假設您正在查看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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM