2013-06-03 2 views
0

나는 누군가가 우리가 절대적으로 if(ViewState["clicks"] == null)를 확인해야하거나 프로그램이 실행되지 않습니다있는 상황을 지적 할 수다시 게시 및 ViewState를

protected void Page_Load(object sender, EventArgs e) 
    { 
     //find if this is the initial get request 
     //after you click a button, this code will not run again 
     if (!IsPostBack) 
     { 
      if(ViewState["clicks"] ==null) 
      { 
       ViewState["clicks"] = 0; 
      } 
      //we're using the ViewState[clicks] to initialize the text in the text box 
      TextBox1.Text = ViewState["clicks"].ToString(); 
     } 
    } 

처럼의 ViewState 변수로 작업 할 때 관용적 것 몇 가지 코드를 본 적이? 나는 새로운 버튼을 먼저 추가 한 다음 Button1을 클릭하고 프로그램을 계속 실행했지만 Button 2 버튼을 클릭하면 포스트 백 이었지만 버튼 1을 여러 번 클릭 한 후에도 프로그램은 여전히 ​​동일하게 작동했습니다.

+0

사용하는 경우에는 완전히 필요하지 않을 수 있습니다. 그러나 ViewState를 기본 유형으로 사용하면 어떻게 처리 할 수 ​​있습니까? 가치가 없다면 특별한 처리가 필요합니다. 네이티브 형식은 정수, Datetime 및 Guid 값을 의미합니다. – CSharpConductor

답변

1

ViewState는 사전 객체 (StateBag)이므로 존재하지 않는 뷰 상태에서 값을 가져 오려고하면 예외가 throw되지 않습니다. 원하는 값이 뷰 상태인지 확인하려면 요청한 것을 수행하십시오.

또한 ViewState가 비활성화 된 페이지에서 사용되는 컨트롤 또는 공유 구성 요소를 개발하는 경우 ViewState 값에 대해 ViewState는 null이됩니다. http://msdn.microsoft.com/en-us/library/ms228048%28v=vs.85%29.aspx

+0

폼에 다른 단추를 추가하는 방법에 대해 궁금해서 처음에는 페이지를 클릭하여 페이지가 포스트 백 이었음을 알았습니다. . 내가 명시 적으로 선언하지 않은 변수에 왜 접근 할 수 있는지 알기 좋습니다! :) – wootscootinboogie

0

누군가가 우리가 절대적으로 를 확인해야하는 상황을 지적 (의 ViewState [ "클릭"] == NULL) 또는 프로그램이 실행되지 않습니다 수있는 경우이의

비트에서 찍은 ?

물론 :

protected void Page_Load(object sender, EventArgs e) 
    { 
     //find if this is the initial get request 
     //after you click a button, this code will not run again 
     if (!IsPostBack) 
     { 
      //if (ViewState["clicks"] == null) 
      //{ 
      // ViewState["clicks"] = 0; 
      //} 
      //we're using the ViewState[clicks] to initialize the text in the text box 
      TextBox1.Text = ViewState["clicks"].ToString(); 
     } 
    } 
당신이 null이되지해야 뭔가에 메소드를 호출하려고 시도하고 있기 때문에 휴식하지만 첫 페이지로드, 그것은 null이됩니다

. 왜 우리가 null을 먼저 테스트했는지 묻는다면 할당하기 전에 if-null 테스트가 할당의 이점이 아니라는 것을 알아야합니다. 텍스트 상자 텍스트를 설정하는 행의 이점입니다 . 해당 IF 블록이 코드에 있으면 ViewState [ "clicks"]를 사용할 때까지는 보장 할 수 있습니다 .ToString()은 ViewState [ "clicks"] 때문에 null에서 ToString()을 호출하지 않습니다. 내가 버튼 1을 여러 번 클릭 한 후에는 다시 게시했다 클릭합니다 버튼 후

) 중 하나를 다른 곳에서 설정 한 또는이 IF의 복에 의해 디폴트 된, 여전히 프로그램 는 동일하게 작용

하지만 포스트 백일 때이 전체 코드 블록이 전혀 실행되지 않습니다. PageState는 포스트 백인 경우 PageLoad에 사용되지 않습니다.

+0

내 의견은 프로그램이 여전히 잘 실행된다는 것입니다. 그 이유는 위의 대답에서 설명했다. – wootscootinboogie