2013-05-03 1 views
6

viewstate에서 일부 상태를 유지해야하는 페이지에 사용자 정의 컨트롤이 있습니다. 다시 게시가 발생할 때마다 viewstate의 항목은 null로 설정됩니다.UserControl 다시 게시 후 Viewstate가 모든 값을 잃습니다.

페이지

사용자 컨트롤은 내가 페이지를로드

<%@ Control Language="C#" ClassName="JournalRankRadioButton" %> 
<script runat="server">  
    public String Test 
    { 
     get 
     { 
      if (ViewState["Test"] == null) 
      { 
       ViewState["Test"] = String.Empty; 
      } 
      return ViewState["Test"].ToString(); 
     } 
     set 
     { 
      ViewState["Test"] = value; 
     } 
    } 

public void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     this.Test = "Test"; 
    } 
} 
</script> 
<asp:CheckBox runat="server" AutoPostBack="true" /> 

,의 ViewState [ "시험"]에 "테스트",하지만 난 확인란을 선택하면 페이지가하는 할당됩니다

<%@ Page Title="" Language="C#" MasterPageFile="~/Main.master" %> 
<%@ Register TagPrefix="JR" TagName="JournalRanking" Src="~/Controls/JournalRankRadioButton.ascx" %> 
<script runat="server"> 
</script> 

<asp:Content ID="Content3" ContentPlaceHolderID="Content1placeholder" Runat="Server"> 
    <asp:Panel CssClass="insetBG1" ID="FormView1" runat="server"> 
     <JR:JournalRanking ID="JournalRanking1" runat="server" ViewStateMode="Inherit" /> 
    </asp:Panel> 
</asp:Content> 

포스트 백 및 ViewState [ "Test"]가 다시 null입니다. 내가 뭘 놓치고 있니? 나는 페이지와 컨트롤의 EnableViewState에서의 EnableViewState = true를 설정에도 불구하고 그래서 -Update-

는 마스터 페이지에서 거짓이었다. 나는 일을 얻기 위해 제어

this.Page.Master.EnableViewState = true; 

를 추가했다.

도움 주셔서 감사합니다.

+1

어떤 체크 박스입니까? ViewState의 가치는 어디에서 확인하고 있습니까? 더 많은 코드를 입력하십시오 – nmat

+0

이 체크 박스는 포스트 백을 트리거하는 데있어 jus입니다. 포스트 백의 Page_Load 메소드에서 디버거의 ViewState를 점검합니다. user467384

답변

8

코드가 완벽하게 작동합니다. 내가 생각할 수있는 유일한 설명은 부모 컨트롤에서 ViewState가 비활성화되어 있다는 것입니다. JournalRanking은 MasterPage 안에있는 페이지 안에 있습니다. EnableViewState=false이 없는지 확인하십시오. 그러면 페이지 다시 게시에서 값을 검색 할 수 없기 때문입니다.

+1

EnableViewState는 마스터 페이지에서 false 였지만 (명시 적으로 설정된 위치를 찾을 수는 없었지만). 컨트롤에서이 값을 true로 설정하면 문제가 해결됩니다. – user467384

관련 문제