2013-05-03 12 views
6

Ich habe ein Benutzersteuerelement auf einer Seite, die einige Status in Viewstate beibehalten müssen. Wann immer ein Postback passiert, werden die Einträge im Viewstate auf null gesetzt.UserControl Viewstate verliert alle Werte nach Postback

Seite

<%@ 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> 

User Control

<%@ 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" /> 

Wenn ich die Seite laden, wird Viewstate [ "Test"] auf "Test" zugewiesen, aber wenn ich die Checkbox, funktioniert die Seite Ein Postback und ViewState ["Test"] ist wieder null. Was vermisse ich?

-Update-

Also, auch wenn ich einstellen EnableViewState = auf der Seite wahr und die Steuer EnableViewState war in der Master-Seite falsch. Ich hatte

this.Page.Master.EnableViewState = true; 

zum Steuerung hinzuzufügen, um es an die Arbeit.

Danke für die Hilfe!

+1

Welche Checkbox? Und wo prüfen Sie den Wert von ViewState? Bitte fügen Sie mehr Code hinzu – nmat

+0

Diese Checkbox (Es ist nur da, um das Postback auszulösen) und ich überprüfe den ViewState im Debugger in der Methode Page_Load auf dem Postback. – user467384

Antwort

8

Ihr Code funktioniert hier einwandfrei. Die einzige Erklärung, die ich mir vorstellen kann, ist, dass ViewState auf einem übergeordneten Steuerelement deaktiviert ist. JournalRanking ist innerhalb einer Seite, die sich in einer MasterPage befindet. Stellen Sie sicher, dass Sie keine EnableViewState=false haben, da Sie dadurch den Wert für das Seitenpostback nicht abrufen können.

+1

Der EnableViewState war in der Masterseite falsch (obwohl ich nicht finden konnte, wo es explizit festgelegt wurde). Wenn Sie es im Steuerelement auf "Wahr" setzen, wurde das Problem behoben. – user467384