2009-03-23 2 views
0

정말이 동작과 혼동 스럽습니다. 누군가 나에게 이것을 설명 할 수 있습니까?다시 게시 후 개체에 액세스 할 수 있습니다 - ASP.NET

나는 다음과 같은 클래스 구조가 : 버튼의 이벤트 핸들러에서

public abstract BaseUserControl : System.Web.UI.UserControl 
{ 
    public List<string> listFieldMapper = new List<string>(); 
} 

    public partial class Property : BaseUserControl 
    { 
    protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 

     base.listFieldMapper.Add("test"); 
    } 
    } 

, (다시 게시 원인), 내가 base.listFieldMapper

나의 이해에 액세스 할 수 있습니다를 포스트 백 사이에 상태가이었다 상태를 유지하려면 ViewState 객체를 사용하십시오. 목록이 값을 어떻게 유지합니까?

부수적으로, 내가 base.listFieldMapper의 값을 OnInit (예 :로드) 이후에 설정하면 다시 게시 한 후에 null 개체가 생깁니다.

답변

2

내가 버튼 클릭이 다시 게시를 호출 할 때 생각 것 :

  1. 서버가 요청을 처리하고, 사용자 컨트롤의 인스턴스가 인스턴스화되고있다.
  2. 그런 다음 서버는 버튼 클릭을 처리하는 메서드를 호출합니다.

페이지가 (버튼 클릭 처리되지 않음)을 요청하면 :

  1. 서버는 요청을 처리하고, 상기 사용자 제어부의 인스턴스가 인스턴스화된다.
  2. 그런 다음 서버는 Load 이벤트를 처리하는 메서드를 호출합니다.
+0

OnLoad 이벤트는 항상 호출됩니다 (다시 게시 여부). – Ruslan

+0

예, Rusian이 맞습니다. 이 문제의 원인이 무엇인지 모릅니다. – DotnetDude

1

ViewState는 여기서 역할을 수행하지 않습니다. 모든 것을 추적하려면 실제로 뭔가를 넣어야합니다 (대부분의 기본 속성이 수행합니다). 두 번째 경우

Control.OnInit -> add value 
Page.OnInit -> value present 
Page.OnLoad -> value present 
Control.OnLoad -> value present 
#PostBack 
Control.OnInit -> add value 
Page.OnInit -> value present 
Page.OnLoad -> value present 
Control.OnLoad -> value present 
Button.OnClick -> value present 

(부하의 목록을 설정) :

Control.OnInit -> value absent 
Page.OnInit -> value absent 
Page.OnLoad -> value absent 
Control.OnLoad -> add value 
#PostBack 
Control.OnInit -> value absent 
Page.OnInit -> value absent 
Page.OnLoad -> value absent 
Control.OnLoad -> add value 
Button.OnClick -> value present 
귀하의 경우에는

는 첫 번째 경우에 이벤트의 순서는 (초기화의 목록을 설정)한다

그리고 listFieldMapper 자체는 클래스 생성자에서 할당되며 컨트롤의 라이프 사이클의 어느 시점에서라도 null이 아닙니다.

+0

두 번째 경우 Button.OnClick 값이 없습니다. – DotnetDude

+0

그런 다음 무언가가 없습니다. 나는 당신의 코드를 복사했고 광고 된대로 작동합니다. 다른 곳에서 뭔가를하고 계시지 않습니까? – Ruslan

관련 문제