반응형
ViewState를 더 쉽게 이해하기 위해서 윈도우 프로그램의 전역변수와 비교를 해보겠습니다.
윈도우 프로그램에서 라벨(label) 1개, 버튼 1개를 만들고, 버튼을 계속해서 클릭하면 변수의 값을 1씩 증가시키고 이 값을 라벨에 출력하는 프로그램을 생각해 보십시오.
윈도우 프로그램과 같은 개념으로 ASP.NET 프로그램을 다음과 같이 작성했습니다.
버튼을 계속해서 클릭해도 n 변수의 값이 1씩 증가하지 않습니다.
ASP.NET에서 버튼을 클릭하면 포스트백(postback)이 일어납니다. 즉, 버튼을 클릭할 때마다 서버에서 페이지를 다시 가져오게 됩니다. 그래서 아래의 프로그램에서 변수 n은 버튼을 클릭할 때마다 매번 다시 생성되기 때문에 n 값이 계속해서 증가하지를 않습니다.
using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Web;
//using System.Web.UI;
//using System.Web.UI.WebControls;
namespace WebApplication11
{
public partial class WebForm1 : System.Web.UI.Page
{
int n;
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
n = 0;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
n++;
Label1.Text = n.ToString();
}
}
}
ViewState 컬렉션
서버에서 페이지를 다시 가져왔을 때, 현재 페이지의 어떤 정보를 유지하기 위해 ViewState 컬렉션이 사용될 수 있습니다.
참고로 현재 페이지의 값을 유지하는 여러 가지의 방법이 있습니다.
아래 코드는 ViewState 컬렉션을 이용해서 서버에 페이지를 다시 요청했을 때, 변수 n 값을 유지하는 방법을 설명하는 예제입니다.
using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Web;
//using System.Web.UI;
//using System.Web.UI.WebControls;
namespace WebApplication11
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
if (ViewState["n"]==null)
ViewState["n"] = 0;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
int n = (int)ViewState["n"];
n++;
Label1.Text = n.ToString();
ViewState["n"] = n;
}
}
}
반응형
'C#_ASP.NET' 카테고리의 다른 글
(ASP.NET C#) 자바스크립트 메시지박스 alert 함수 실행 (0) | 2023.05.23 |
---|---|
( ASP.NET C#) MessageBox 삭제할까요? 예 아니오 버튼 구현하기 (0) | 2023.05.23 |
(ASP.NET, C#) 쿠키 Cookie 저장과 읽기 (0) | 2023.05.15 |
(ASP.NET, C#) 웹폼페이지에 코드 블록 포함하기 ItemTemplate, Eval (0) | 2023.05.13 |
(ASP.NET, C#) 그리드뷰 GridView EmptyDataTemplate 데이터가 없을 때 출력할 문자열 지정하기 (0) | 2023.05.12 |