2014-10-28 45 views
0

我知道這是一個常見問題,我環顧四周,嘗試了很多事情,但似乎無法使其正常工作。使用ViewState通過回發來維護財產狀態

我有一個下拉列表,列出其元素的升序,我添加了一個複選框,應該顛倒下拉列表的順序。

我試圖屬性沿的行添加到下拉列表控件,東西:

public bool isReverse = false; 

    public bool reverse 
    { 
     get 
     { 
      return ViewState["isReverse"] != null ? (bool)ViewState["isReverse"] : false; 
      //return ViewState["isReverse"] != null ? (bool)ViewState["isReverse"] : isReverse; 
//I have also tried returning isReverse, but its the same behaviour 
     } 
     set 
     { 
      ViewState["isReverse"] = value; 
      isReverse = value; 
     } 

    } 

有可能是多餘的代碼在那裏。我的複選框有一個事件處理程序,執行以下操作:

protected void isReverse_CheckedChanged(object sender, EventArgs e) 
    { 
     CheckBox myBox = (CheckBox)sender; 
     SortableCustomDropDownLIst myList = sddl; 
     if (myBox.Checked) 
     { 
      myList.reverse = true; 
     } 
     else 
     { 
      myList.reverse = false; 
     } 
    } 
我最初的解決方案沒有使用ViewState的,因此,每我們有一個回發時重置回假,它絕不會以相反的順序列出

。我的代碼檢查這個屬性,並確定是否需要顛倒負責提供下拉列表的ArrayList。

我不確定爲什麼我的程序有以下行爲:

加載頁面:升序排列,複選框取消選中

檢查複選框:仍然升序,選中複選框

取消選中複選框:降序排列,複選框選中

檢查複選框:升序排列,選中複選框

... [R EPEAT。

這些集合僅由複選框的事件處理函數調用,get僅在排序下拉列表時調用。我誤解了一些東西,我不明白爲什麼這不起作用,除非我誤解了ViewState的工作方式。

我認爲它與第一個事件句柄如何觸發屬性爲true有關,但ViewState尚未設置,所以它不記得任何東西。

+0

這一行完成任何事情:'SortableCustomDropDownLIst myList = sddl;'這可能是爲什麼事情沒有工作? – 2014-10-28 02:00:09

+0

@SteveWellens是的,我會盡快刪除這些東西。我不確定某件事情,寫了很多無稽之談。我相信處理程序正在按照我想要的方式工作。與該物業有關。 – user2859406 2014-10-28 02:02:09

+0

爲什麼不在客戶端腳本中完成此操作? – theMayer 2014-10-28 02:39:29

回答

0

我發現我做錯了什麼。

我正嘗試在Page_Load中求助/重做我的下拉列表,但是我應該切換真/假的屬性尚未修改,因爲在點擊複選框的情況下這樣做。

我將排序/顯示下拉列表順序的功能移到了checkbox事件中,現在按預期工作。