ASP.NET自定义服务器控件不持久化ViewState

时间:2009-12-21 17:35:13

标签: asp.net viewstate

我创建了一个自定义服务器控件来处理某些数据,将该数据存储到ViewState,然后从该数据中呈现自己。我正在使用调试器,可以实际看到数据设置为ViewState:

public string RawData
    {
        get
        {
            string result = null;

            if (ViewState["RawData"] != null)
            {
                result = ViewState["RawData"].ToString();
            }

            return result;                
        }
        set
        {
            ViewState["RawData"] = value;
        }
    }

但是,在回发后,ViewState值不会保留,并且为null。为什么会这样?我在哪里可以尝试进行故障排除?我可以说,自使用这种方法以来,ViewState隐藏字段长度已经增加。

提前致谢!

编辑: 这是我的Render方法,用于查看我在哪里设置ViewState:

    protected override void Render(HtmlTextWriter writer)
    {
        if (this.RawData == null)
        {
            StringBuilder content = new StringBuilder();

            content.Append(this.BuildHeader());
            content.Append(this.BuildLevelsMarkup());
            content.Append(this.BuildFooter());

            this.RawData = content.ToString();
        }

        writer.Write(this.RawData);
    }

1 个答案:

答案 0 :(得分:8)

如果您在OnInit事件期间设置Viewstate值,则可能出现一个错误来源。 ViewState仅在调用“TrackViewState”后存储。 http://msdn.microsoft.com/en-us/library/ms972976.aspx

也许你是“早到”。如果在渲染过程中设置数据,则“为时已晚”。

编辑:你在“渲染”期间改变了你的价值 - 这太晚了!在渲染期间,ViewState已写入HTML流。尝试将代码移动到OnPreRender()