2011-03-31 51 views
1

怎麼辦,每次s_Sort不更新SortDirection.Desc如何做那些領域不是啓動?

private SortDirection s_Sort = SortDirection.Desc; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     lblSort.Text = S_Sort.ToString();//every time == SortDirection.Desc - this is bad! 
     if (!IsPostBack) 
     { 
      ShowTree(); 

      Validate(); 
     } 
} 

需要

public void btnSortUp_Click(object sender, EventArgs e) 
    { 
     S_Sort = SortDirection.Asc; 
    } 
    public void btnSortDown_Click(object sender, EventArgs e) 
    { 
     S_Sort = SortDirection.Desc; 
    } 

但經過SortDirection.Desc不好

+0

如果不wan't它是SortDirection.Desc然後不要每次都分配它......它需要做什麼呢? – CRice 2011-03-31 23:12:09

+0

@CRice,我編輯帖子 – Mediator 2011-04-01 07:16:47

回答

3

的是ASP.NET生命週期的問題。每次發生回發(例如,單擊btnSortUp或btnSortDown時),都會創建頁面的新實例,即S_Sort將重新初始化爲Desc。如果你想堅持回發之間的值,你可以將其存儲在ViewState中,例如,通過在私有財產封裝它:

private SortDirection S_Sort { 
    get { return (SortDirection)(ViewState["S_Sort"] ?? SortDirection.Desc); } 
    set { ViewState["S_Sort"] = value; } 
} 
+0

而我可以保存在ViewState大數組? – Mediator 2011-04-01 07:18:09

+0

@simply:是的,你可以,但請注意視圖狀態(a)在客戶端和服務器之間在*每個回發中來回發送,(b)可以由惡意用戶修改。因此,在視圖狀態下存儲大量內容可能會導致性能問題。對於這樣的東西,'Session'可能是一個更好的地方(或者'Cache',如果數組對於所有客戶端來說都是相同的)。 – Heinzi 2011-04-01 07:21:38

+0

+1從這個問題拉出正確的答案值得超過2票。 – 2011-05-19 21:54:57