.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[키값] = 벨류; 이렇게 사용하는데 키값이 존재하지 않을경우엔 새로 생성되고
존재하는 경우엔 벨류값이 바뀐다.
포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.