2013-05-03 50 views
6

viewstateで状態を保持する必要があるページにユーザーコントロールがあります。ポストバックが発生するたびに、viewstateのエントリはnullに設定されます。UserControlポストバック後に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> 

ユーザーコントロール

<%@ 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の[ "テストは、"] "テスト" に割り当てられますが、私はチェックボックスをチェックすると、ページがありませんポストバックとViewState ["Test"]は再びnullになります。私は何が欠けていますか?私は、ページとコントロールEnableViewStateでEnableViewState = trueを設定したにもかかわらずそう-Update-

は、マスターページで偽でした。私はそれを動作させるためにコントロール

this.Page.Master.EnableViewState = true; 

を追加する必要がありました。

ありがとうございました!

+1

どのチェックボックスですか? ViewStateの価値はどこで確認していますか?コードを追加してください – nmat

+0

このチェックボックスは、ポストバックのPage_LoadメソッドでデバッガのViewStateをチェックしています。 user467384

答えて

8

コードは完全にここで動作します。私が考えることができる唯一の説明は、ViewStateが親コントロールで無効になっていることです。 JournalRankingは、MasterPage内にあるページの内部にあります。 EnableViewState=falseがないことを確認すると、ページポストバックの値を取得できなくなる可能性があります。

+1

EnableViewStateはマスターページではfalseでした(ただし、明示的に設定された場所は見つかりませんでした)。コントロールでそれをtrueに設定すると、問題が解決しました。 – user467384

関連する問題