본문 바로가기

Programming/.NET

[ASP.NET] 서버 컨트롤 - 4 (ControlState)

ViewState와 비슷한 개념의 ControlState는 컨트롤에만 사용할 수 있는 것으로 ViewState가 비활성상태라 하더라도 아무런 영향을 받지 않고 컨트롤에서 데이터를 저장할 수 있는 기능을 유지할 수 있습니다.

 

protected override void OnInit(EventArgs e)
{
    Page.RegisterRequiresControlState(this);
    base.OnInit(e);
}

 

ControlState사용을 위해서는 우선 RegisterRequiresControlState메소드를 호출해야 합니다. 예제에서 이 메소드는 컨트롤의 OnInit메소드를 재정의하여 구현하였습니다.

 

protected override void LoadControlState(object dataState)
{
    Text = (string)dataState;
}

protected override object SaveControlState()
{
    return (object)Text;
}

 

뒤이어 LoadControlState와 SaveControlState메소드를 위와같이 재정의 합니다. 이것으로 ControlState사용준비가 끝났습니다.

 

public string Text
{
    get
    {
        String s = (String)ViewState["Text"];
        return ((s == null) ? String.Empty : s);
    }

    set
    {
        ViewState["Text"] = value;
    }
}

 

서버 컨트롤에서 Text 속성은 ViewState를 사용하도록 되어 있는데 RegisterRequiresControlState메소드 사용과 LoadControlState, SaveControlState메소드 재정의를 통해서 이제는 ControlState를 데이터저장용도로 사용할 것입니다.

 

따라서 페이지에서 EnableViewState속성이 false로 되어 있다 하더라도 Text속성으로 입력된 내용을 여전히 기억할 것입니다.

 

<form id="form1" runat="server">
<div>
    <cc1:WebCustomControl1 runat="server" ID="myControl" />
    <asp:Button ID="Button1" runat="server" Text="Button" />
</div>
</form>

 

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
        myControl.Text = "aaabbb";
}