2011-03-31 7 views
1

방법마다 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; 
    } 

필요 업데이트하지 s_Sort 그렇게 할 수 있지만 SortDirection.Desc 나쁜 후

+0

것은 당신이 그 다음 SortDirection.Desc 수 wan't하지 않는 경우 : 당신은 포스트 백 사이의 값을 유지하려면, 당신은 개인 재산에서 그것을 캡슐화하여, 예를 들어, viewstate가에 저장할 수 있습니다 매번 할당하지 마십시오 ... 대신해야 할 일은 무엇입니까? – CRice

+0

@CRice, 내가 게시물을 편집 – Mediator

답변

3

는 ASP.NET 라이프 사이클의 문제 . 다시 게시가 발생할 때마다 (예 : btnSortUp 또는 btnSortDown을 클릭 할 때) 페이지의 새 인스턴스가 생성됩니다. 즉, S_Sort가 Desc로 다시 초기화됩니다.

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

그리고 ViewState 큰 배열에 저장할 수 있습니까? – Mediator

+0

@simply : 예, 가능 합니다만, viewstate (a)는 모든 * 포스트 백에서 클라이언트와 서버간에주고 받고, (b)는 악의적 인 사용자에 의해 수정 될 수 있습니다. 따라서 viewstate에 큰 항목을 저장하면 성능 문제가 발생할 수 있습니다. 그러한 것들을 위해서,'Session'이 더 좋은 장소 일 수 있습니다. (배열이 모든 클라이언트에게 동일하다면'Cache'). – Heinzi

+0

+1 해당 질문에서 정답을 뽑으면 2 표 이상을받을 자격이 있습니다. –

관련 문제