.aspx.cs 파일에 서버 컨트롤을 작성하다 보면,


페이지가 다시 로딩 될 시(버튼 클릭, 새로고침 등) 


변수의 데이터가 날라가고 처음 값으로 셋팅된다.


만약 페이지가 재로딩 되더라도 상태 값을 저장하고 싶다면,


Page객체가 제공하는 ViewState 컬랙션을 사용하면 좋다.


Key 와 Value로 상태를 저장하면 된다.


주의할 점은 동일 페이지 내에서만 적용된다.


다른 페이지간 이동시, ViewState는 유지되지 않는다.


아래의 예시코드를 보자.


public partial class Test : System.Web.UI.Page{


  protected int test = 1;


  protected void Page_Load(Object sender, EventArgs e){


    if(IsPostBack) Response.write((int)ViewState["Test"]);

    Response.write("test : "+test);

  }


  protected void Page_PreRender(Object sender, EventArgs e){

    ViewState["Test"] = test++;

  }


}


Page가 재로딩 될때 ViewState를 접근해야 null pointer오류가 나지 않는다.


따라서 Page가 제공해주는 IsPostBack 변수를 사용했다.


실행한 후, 결과물을 보면 test 는 계속 1이지만, ViewState를 통해 가져온 상태값은 하나씩 증가하는걸 볼 수 있다.


중요한 메서드는 Page_PreRender 이다. 페이지 생명주기에서 Page_PreRender 의 역할은


Page가 재로딩 되기전의 상태를 제공해준다.


따라서 test 의 변수 정보를 ViewState["Test"]에 넣어준다. 


ViewState는 아래와 같이 키 와 벨류가 존재한다.


ViewState[키값] = 벨류; 이렇게 사용하는데 키값이 존재하지 않을경우엔 새로 생성되고


존재하는 경우엔 벨류값이 바뀐다.





포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

+ Recent posts