C#_ASP.NET

(ASP.NET, C#) ViewState 컬렉션 개요

코딩ABC 2023. 5. 16. 21:17
반응형

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;
        }
    }
}

ASP.NET, ViewState 컬렉션

ASP.NET, ViewState 컬렉션

 

반응형