2011-04-26 5 views
2

캐시, 페이지 뷰 상태 및 세션에 대해 배우려고합니다. VS2010에서 ASP.NET 웹 응용 프로그램을 만들고 3 개의 텍스트 상자와 단추를 페이지에 추가했습니다. 나는 디버그 모드로 실행하고 각각에 임의의 텍스트를 입력하고 버튼을 누르면 아무 것도 저장되지 않은 것처럼 보입니다 (모든 텍스트는 "null"입니다). 내가 잘못된 행동을하고 있습니까? web.config에 뭔가를 추가해야합니까? 루키 질문에 대한ASP.NET 캐시/ViewState/세션 사용

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="State._Default" EnableSessionState="True" EnableViewState="True" %> 

감사합니다, 미안 :

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (IsPostBack) 
     { 
      if (Cache["textbox1"] != null) 
       TextBox1.Text = (string)Cache["textbox1"]; 
      else 
       TextBox1.Text = "null"; 

      if (ViewState["textbox2"] != null) 
       TextBox2.Text = (string)ViewState["textbox2"]; 
      else 
       TextBox2.Text = "null"; 

      if (Session["textbox3"] != null) 
       TextBox3.Text = (string)Session["textbox3"]; 
      else 
       TextBox3.Text = "null"; 
     } 
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     Cache["textbox1"] = "(Cache) " + TextBox1.Text; 
     ViewState["textbox2"] = "(VS) " + TextBox2.Text; 
     Session["textbox3"] = "(Session) " + TextBox3.Text; 
    } 

그리고 페이지 헤더 : 여기에 내가 사용하고 코드입니다. 나는 이것에 아주 새롭다.

+0

나머지 Default.aspx 코드를 게시 하시겠습니까? –

답변

1

Page_LoadButton1_Click 전에 발생합니다. 따라서 Page_Load에서 항상 텍스트 상자 텍스트를 statebags의 텍스트로 바꿉니다 ("null", 처음에는 "(Cache)" + "null" 등). 텍스트 상자에 입력하는 내용은 Button1_Click까지 생기지 않습니다.

대신 Page_PreRender를 사용하십시오.

+0

페이지 라이프 사이클에 대한 지식이 심각하게 부족한 것으로 보입니다. 코드를 OnPreRender로 옮기면 내가하려는 일이 완성되었습니다. Loki와 Muhammad에게 감사드립니다! –

1

지금 당장 버튼을 클릭 할 때마다 Page_Load 프로 시저의 코드가 Button1_Click 이벤트를 저장하기 전에 TextBox.Text 값을 덮어 씁니다.

if (IsPostBack)if (!IsPostBack)으로 변경하면 처음에 페이지를 요청할 때 값이 session/viewstate/cache에서로드 되기만 시도합니다. 따라서 페이지를 요청하고 버튼으로 새 값을 설정 한 다음 주소 표시 줄에 Enter 키를 다시 입력하여 Page_Load에서 코드를 실행해야합니다.

내가 제안하는 것은 "Load Values"라는 새로운 버튼을 만들고 Click 이벤트가 현재 Page_Load에있는 코드를 실행한다는 것입니다. 그렇게하면 요청이 포스트 백인지 여부에 관계없이 해당 코드를 묶을 필요가 없습니다. 테스트 결과가 훨씬 이해하기 쉬울 것이라고 생각합니다.