문제

내 설정의 기본 사항은 다음과 같습니다.

System.Web.UI.Page에서 상속되는 BasePage 클래스가 있습니다.BasePage에는 ViewState 컬렉션의 서로 다른 두 항목(예: BasePage의 this.ViewState["Year"])에서 가져오기/설정을 수행하도록 구현된 두 가지 속성이 있습니다.

BasePage에서 상속받는 또 다른 클래스가 있습니다. 이를SpecificBasePage라고 부르겠습니다.

마지막으로,SpecificBasePage를 상속하는 aspx 페이지가 있습니다.

중단점을 추가하고 코드를 여러 단계 실행하여 초기 페이지 로드 시 두 보기 상태 속성에 모두 값이 할당되고 해당 값이 첫 번째 페이지 로드 수명 주기 동안 지속된다는 사실을 발견했습니다.

그러나 페이지가 다시 게시되면 Page_Load 이벤트 및 기타 이벤트 처리기(ViewState가 로드되어야 하는 경우) 중에 두 속성 모두 null을 반환합니다.this.ViewState.Count를 검사하면 컬렉션에 개체가 0개 있는 것으로 나타납니다.

내가 어딘가에서 하고 있는 일이 ViewState에 영향을 미치고 이 동작을 유발할 수 있다고 생각하는 사람이 있나요?

--addition 나는 그것을 내 코드의 일부로 격리시켰다.초기 로드 시 OnInit에 viewstate 속성 값을 제공하고 이를 OnLoad로 이동할 때 값이 포스트백 전체에서 유지된다는 것을 발견했습니다.추가된 보기 상태 값이 초기 페이지 수명 주기 전반에 걸쳐 유지되지만 포스트백에서는 폐기되는 것 같아요.

도움이 되었습니까?

해결책

페이지의 Aspx에서 EnableViewState = false가 있을 수 있습니다.

또한 애플리케이션의 web.config에서 비활성화되거나 요소의 전체 컴퓨터에 대해서도 비활성화될 수 있습니다.

업데이트 1: asp.net 수명 주기에서 ViewState는 Init 이후, Load 이전에 로드됩니다. 더 많은 정보.init의 모든 항목이 페이지 선언의 일부로 간주되는 것처럼 보입니다.나중에 asp.net은 viewstate를 로드하고 그 후에 viewstate에 대한 변경 사항을 추적하기 시작합니다.그 이후에는 asp.net에서 viewstate의 초기 정보와 변경된 정보 사이의 차이를 확인하므로 이를 로드로 이동하면 문제를 피할 수 있습니다(초기 상태가 없고 새 상태가 viewstate에 추가한 것이기 때문입니다). .위 링크에서:

"그 이유는 Statebag 클래스가 TrackViewState () 메소드가 호출 된 후에 만 ​​멤버의 변경 사항 만 추적하기 때문입니다.즉, Statebag이있는 경우 SaveViewState () 메소드가 호출되면 TrackViewState () 이전에 작성된 모든 추가 또는 수정이 저장되지 않습니다.TrackViewState () 메소드는 인스턴스화 단계 이후에 발생하는 초기화 단계의 끝에서 호출됩니다.따라서 Instantiation Stage의 초기 속성 할당 (속성 세트 액세서에서 ViewState에 작성된 경우 SaveViewState () 메소드가 Save State Stage에서 Call에서는 지속되지 않습니다. 호출. "

다른 팁

다음은 다른 사용자가 게시 한 훌륭한 답변입니다 ASP.NET 페이지 라이프 사이클 ViewState 문제를 살펴볼 가치가 있습니다.

또한, "진정으로 ViewState를 이해합니다"

나중에 추가 한 부품에서 언급했듯이 ASP.NET이 오류를 던지지 않고 초기 페이지 수명주기 동안보기 상태에 존재할지라도 페이지로드 전에보기 상태에 아무것도 설정할 수 없습니다. , 후속 포스트 백의 수명주기에서는 지속되지 않습니다.

뷰 스테이트 값을 설정하는 위치를 살펴보십시오. OnOnload 이벤트 와이어를 연결하고 ViewState 객체를 검사하여 값이 실제로 설정되고 있는지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top