2009-05-22 2 views
2

web.config 파일에서 viewstate를 사용하지 않도록 설정했는데 페이지에 EnableViewState = true가 없어도 페이지가 상당히 큰 뷰 상태 (40k 페이지의 경우 8k)로 렌더링됩니다. viewstate 디코더를 사용하여 viewstate 내용을 검사하고 내 페이지에서 사용하는 멀티 뷰 컨트롤이 유죄임을 확인했습니다. 어쨌든 multiview 컨트롤을 viewstate 사용을 중지 할 수 있습니까?ViewState가 장애가 발생해도 내 페이지의 20 %를 차지합니다!

내가 어떤 제안을 멀티 뷰에서 상속과 LoadViewState 및 SaveViewState의 메소드를 오버라이드 (override)하지만 난 마지막 수단으로이 떠날거야 제어 클래스를 만드는 방법에 대해 생각하고 있어요?

감사

+0

항상 MVC를 사용할 수 있으며 ViewState가 필요하지 않을 것입니다.) – Kezzer

+0

MVC로 옮길 계획 이었지만 너무 늦어서 거의 끝났습니다. –

답변

3

ASP.NET 2.0 숨겨진 필드는 "이전"의 ViewState (viewstate가 상태 가방/사전)과 ControlState로 구성되어 viewstate가의 내부 내용입니다. ViewState와는 달리 컨트롤 상태는 비활성화 할 수 없으며 컨트롤이 제대로 작동해야하는 최소한의 정보를위한 것입니다.

당신은 ControlState을 해제 할 수 있으며, 당신도 그것을 살 두 페이지에 제어 (종류) 다른를 사용합니다.

4

여기에 단지 각 게시물 백을 위해 와이어를 통해 전송되는 viewstate를 제거하는 좋은 방법이다. 기본적으로 전체 viewstate를 서버에 세션 변수로 저장하고 viewstate 필드에 식별자 만 전송합니다.

압축이 매우 극적인 성능 향상

의 다음 문서를해야합니다 페이지에서 점점 viewstate가 퍼팅 반면 대역폭의 관점에서 당신에게 약간을 절약 할 몇 가지 성과 측정 지표와 기술뿐만 아니라 eggheadcafe

+0

제안 주셔서 감사하지만 사실 viewstate 완전히 없애려고 노력하고있어 –

+0

당신은 내가 게시 한 기사에 주어진 방법을 사용하여 완전히 렌더링되는 viewstate 필드를 막을 수 있습니다. 난 asp.net 항상 최소한 viewstate 필드를 생성하는 경우에도 일부 최소 정보, 그것을 비활성화 생각합니다. – Vikram

0

설명 System.Web.UI.Page 클래스에는 페이지에서 재정의 할 수있는 PageStatePersister라는 속성이 있습니다. 여기서 페이지 viewstate에 대한 기본 지속성 모드를 대체하는 PageStatePersister 유형 오브젝트를 리턴 할 수 있습니다.

하는 것은 비 크람은 숨겨진 필드 대신 세션에서 viewstate를 저장하는 SessionPageStatePersister을 사용할 수 있습니다 제안한다. 그러나 캐시 또는 데이터베이스 또는 파일에 viewstate를 저장하는 자신의 PageStatePersister를 구현할 수도 있습니다. 뭐든 당신이 정말로 필요합니다.

당신이하지 말아야 할 것은 viewstate가가 당신의 일부 컨트롤에 의해 필요에 대한 viewstate가 폐기하는 PageStatePersister을 사용하는 것입니다.

+0

ViewState (또는 ControlState)는 페이지가 실제로 포스트 백을 수행하는 경우에만 필요합니다 .... – RickNZ

+0

좋은 지적. 대부분의 경우 페이지는 내가 생각하는 포스트 백을 수행하지만 피할 수 있다면 ViewState를 완전히 비활성화 할 수 있습니다. –

1

내 자신의 질문에 답하기 위해 필자는 마스터 페이지에서 runat = "server"형식을 제거하여 viewstate를 없애 버렸습니다. 이제 폼 태그에 실제 다시 게시가 필요한 컨트롤 만 runat = 서버. 그것은 또한 컨트롤 상태를 버리는 것 같습니다 (내가 원하는 것은 페이지가 다시 게시되지 않습니다), 그래도 더 조사해야합니다.

왼쪽에있는 유일한 문제는 페이지의 아무 곳에 나 양식 runat = server 태그를 추가하면 Multiview가 내 양식 태그를 찾고 숨겨진 viewstate 필드에 휴지통을 추가한다는 것입니다. 다중 뷰는 runat = "server"태그 형식으로 묶여 있지만 어쨌든 양식 태그를 찾기에는 충분히 똑똑합니다.

2

당신은 당신의 페이지 (또는 기본 페이지)에 대한 렌더링 viewstate가 숨겨진 입력을 검색하고 작가에서 제거 오버라이드 (override) 할 수있다.

단계 :

  • 가 __VIEWSTATE
  • 로 입력을 제거 문자열로 base.render
  • 출력 htmlwriter 내용을이 HTMLWriter에 새 문자열을 작성합니다.
관련 문제