【问题标题】:UserControl Viewstate loses all values after postbackUserControl Viewstate 在回发后丢失所有值
【发布时间】:2013-05-03 20:57:28
【问题描述】:

我有一个页面上的用户控件需要在视图状态中保持某些状态。每当回发发生时,视图状态中的条目都会设置为 null。

页面

<%@ 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["Test"] 被分配给“Test”,但是当我选中复选框时,页面执行回发并且 ViewState["Test"] 再次为空。我错过了什么?

-更新-

因此,即使我在页面中设置 EnableViewState = true 并且在母版页中控件 EnableViewState 为 false。我不得不添加

this.Page.Master.EnableViewState = true;

Control 以使其工作。

感谢您的帮助!

【问题讨论】:

  • 什么复选框?你在哪里检查 ViewState 的值?请添加更多代码
  • 这个复选框 (它只是用来触发回发)我正在调试器中的 Page_Load 方法中检查 ViewState回发。

标签: asp.net user-controls postback viewstate


【解决方案1】:

您的代码在这里完美运行。我能想到的唯一解释是在父控件上禁用了 ViewState。 JournalRanking 在 MasterPage 内的页面内。检查您是否在任何地方都没有 EnableViewState=false,因为这会阻止您检索页面回发上的值。

【讨论】:

  • 母版页中的 EnableViewState 为 false(尽管我找不到明确设置的位置)。在控件中将其设置为 true 可以解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
相关资源
最近更新 更多