2013-05-03 52 views
6

我在页面上有一个用户控件,需要在视图状态下保留某些状态。每当发生回发时,视图状态中的条目都会设置为空。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 [“测试”]再次为空。我错过了什么?

-Update-

所以,尽管我设置的EnableViewState =在页面和控件的EnableViewState真正是在母版页错误。我不得不

this.Page.Master.EnableViewState = true; 

添加到控制才能正常工作。

感谢您的帮助!

+1

什么复选框?你在哪里检查ViewState的值?请添加更多代码 – nmat 2013-05-06 01:34:36

+0

这个复选框(这是在那里触发回发),我在回调中的Page_Load方法中检查调试器中的ViewState。 – user467384 2013-05-06 14:51:11

回答

8

你的代码在这里完美工作。我能想到的唯一解释是ViewState在父控件上被禁用。 JournalRanking位于MasterPage内的页面内。检查你没有EnableViewState=false任何地方,因为这会阻止你检索页面回发中的值。

+1

母版页中的EnableViewState为false(尽管我无法找到它明确设置的位置)。在Control中将其设置为true解决了问题。 – user467384 2013-05-06 17:27:37