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

Mik*_*ole 2 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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,在回发后,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);
    }
Run Code Online (Sandbox Code Playgroud)

Art*_*hur 8

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

也许你是"早到".如果在渲染期间设置数据,则"为时已晚".

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