뷰스테이터스는 클라이언트에 데이터를 저장하는 방법의 하나입니다.
그렇기 때문에 쿠키와 마찬가지로 보안의 위험성이 있습니다.
하지만 쿠키와는 달리 페이지가 종료되면 데이터가 사라집니다.
뷰스테이터스를 사용하기위해서는 몇가지 알아야 할 사항이 있습니다.
저장가능한 데이터 형태는 아래와 같습니다.
- 문자열
- 정수
- 부울 값
- Array 개체
- ArrayList 개체
- 해시 테이블
base64 인코딩됩니다.
뷰스테이터스에 의해 페이지 로드가 느려질수 있으므로 테스트를 해봐야 합니다.
(참고 : MSDN - 상태 관리, ViewStateMode 열거형 )
용량문제가 발생할수 있는 소지가 있으므로 모바일기기에서는 재대로 동작하지 못할수 있습니다.
데이터를 넣는 방법은 세션과 비슷합니다.
단지 'ViewState'를 사용한다는 것을 빼면 말이죠.
새로운 페이지를 열고 같이 UI를 만들어 봅시다.
GridView1
Label1
Button1
Button3
Button2
클래스 전역변수에 다음과 같이 선언 합니다.
string m_sTemp = "초기값";
'Button3'의 비하인드 코드에 다음과 같이 작성합니다.
protected void Button3_Click(object sender, EventArgs e)
{
//뷰상태에 내용 넣기
ArrayList result = new ArrayList(4);
result.Add("item 1");
result.Add("item 2");
result.Add("item 3");
result.Add("item 4");
ViewState.Add("ListData", result);
m_sTemp = "후속값";
}
ViewState.Add("ListData", result);
이부분이 뷰스테이터스에 값을 넣는 부분입니다.
메개변수는
넣을 뷰스테이터스이름, 넣을 값
'Button1'의 비하인드 코드를 다음과 같이 작성합니다.
protected void Button1_Click(object sender, EventArgs e)
{
//뷰상태 보기
GridView1.DataSource = (ArrayList)ViewState["ListData"];
GridView1.DataBind();
Label1.Text = this.m_sTemp;
}
값을 읽어오는 것은 세션과 비슷합니다.
'ViewState'자체가 배열처럼 동작하죠.
일반적인 배열처럼 동작하기 때문에 모두지우기(Clear)와 하나만 지우기(Remove) 둘다 사용이 가능합니다.
protected void Button2_Click(object sender, EventArgs e)
{
//뷰상태 지우기
//ViewState.Clear();
ViewState.Remove("ListData");
}
이제 테스트해봅시다.
뷰스테이터스에 값을 넣고 뷰상태를 확인하면 데이터가 들어가있는 것을 확인 할수 있습니다.
결과를 보시면 아시겠지만 m_sTemp의 값은 항상 '초기값'인것을 확인 할수 있습니다.
이것은 'ASP.NET'의 동작방식때문에 페이지가 리플래시(버튼을 누르거나 새로고침을 하는 경우 등등)되면 변수값이 유지 되지 않기 때문입니다.
뷰스테이터스에 값을 넣고 뷰상태를 확인하면 데이터가 들어가있는 것을 확인 할수 있습니다.
하지만 객체(object)는 저장이 되지 않는 다는 단점이 ㅜㅜ
p.s. 이제는 구시대의 유물.....