Programming/.NET

특정 웹페이지에서 어떤 작업을 처리하는 중에 브라우저의 '뒤로가기'나 '앞으로'를 통해 브라우저를 이동해 버리면 처리결과와는 상관없이 입력내용 일부는 잃어버리게 됩니다. 이런 경우를 대비해 ASP.NET에서는 ScriptManager를 통하여 히스토리를 관리할 수 있는 방법을 제공하고 있습니다.

 

이는 사용자가 다른 페이지로 이동했다가 다시 원래 페이지로 돌아오는 경우 입력값을 복원할 수 있다는 것을 의미합니다.

 

<asp:ScriptManager ID="ScriptManager1" runat="server" EnableHistory="true" 

OnNavigate="ScriptManager1_Navigate"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
    </ContentTemplate>
</asp:UpdatePanel>

 

ScriptManager와 하나의 UpdatePanel, 그리고 안에 TextBox와 Button을 배치하였습니다. 여기서 우선 ScriptManager에 주목해 주세요. EnableHistory속성을 true로 하여 ScriptManager에서 히스토리를 관리하도록 하였고 OnNavigate이벤트를 연결했습니다. OnNavigate이벤트는 사용자가 브라우저에서 '뒤로', '앞으로'를 통해 웹페이지를 탐색하는 경우를 확인하기 위해서입니다.

 

protected void Button1_Click(object sender, EventArgs e)
{
    if (ScriptManager1.IsInAsyncPostBack && !ScriptManager1.IsNavigating)
    {
        TextBox1.Text = DateTime.Now.ToString();
        ScriptManager1.AddHistoryPoint("myHistory", DateTime.Now.ToString());
    }
}

protected void ScriptManager1_Navigate(object sender, HistoryEventArgs e)
{
    TextBox1.Text = e.State["myHistory"];
}

 

TextBox와 Button은 UpdatePanel안에 있으므로 AJAX방식으로 동작하여 TextBox안에 현재시간에 대한 내용을 뿌릴 것입니다.

 

Button의 Click이벤트에서는 ScriptManager에 AddHistoryPoint메소드를 호출하여 사용자가 지정하는 특정 키로 원하는 데이터값을 추가하도록 합니다. 참고로 이 처리는 ScriptManager의 IsInAsyncPostBack속성으로 인해 현재 비동기포스트백처리가 시도되며 IsNavigating으로 페이지가 이동되는 상태가 아닌경우만 진행하도록 합니다.

 

Button을 누른 뒤 페이지에서 '뒤로'버튼을 눌러 이전페이지로 갔다가 다시 현재페이지로 돌아오면 ScriptManager의 Navigate이벤트가 호출되면서 이전에 AddHistoryPoint메소드로 추가했던 데이터값을 가져와 테스트박스에 추가할 것입니다.

0 0