2013-05-03 78 views
6

Mam kontrolę użytkownika na stronie, która musi utrzymywać stan w stanie wyświetlania. Ilekroć nastąpi odświeżenie, wpisy w stanie widoku zostaną ustawione na wartość null.UserControl Viewstate traci wszystkie wartości po odświeżeniu strony

Page

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

kontrolny użytkownika

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

Kiedy załadować stronę, ViewState [ "Test"] zostanie przypisany do "Test", ale kiedy zaznaczyć pole wyboru, strona robi odświeżenie i parametr ViewState ["Test"] ponownie ma wartość null. czego mi brakuje?

-Update-

Więc, mimo że zachodziło EnableViewState = true na stronie i EnableViewState kontrolnej była fałszywa na stronie głównej. Musiałem dodać

this.Page.Master.EnableViewState = true; 

do Kontroli aby zmusić go do pracy.

Dzięki za pomoc!

+1

Jakie pole wyboru? A gdzie sprawdzasz wartość ViewState? Proszę dodać więcej kodu – nmat

+0

To pole wyboru (Jest tam, aby wywołać odświeżenie) i sprawdzam ViewState w debuggerze w metodzie Page_Load na poczcie zwrotnej. – user467384

Odpowiedz

8

Twój kod działa tutaj idealnie. Jedyne wyjaśnienie, jakie mogę sobie wyobrazić, to wyłączenie elementu ViewState w formancie nadrzędnym. JournalRanking znajduje się na stronie znajdującej się na stronie MasterPage. Sprawdź, czy nie masz żadnej lokalizacji, ponieważ uniemożliwiłoby to pobranie wartości odświeżonej strony.

+1

Ustawienie EnableViewState miało wartość false na stronie wzorcowej (chociaż nie mogłem znaleźć miejsca, w którym zostało ono ustawione jawnie). Ustawienie go na wartość true w sterowaniu rozwiązało problem. – user467384