我创建了一个自定义服务器控件来处理某些数据,将该数据存储到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);
}
答案 0 :(得分:8)
如果您在OnInit事件期间设置Viewstate值,则可能出现一个错误来源。 ViewState仅在调用“TrackViewState”后存储。 http://msdn.microsoft.com/en-us/library/ms972976.aspx
也许你是“早到”。如果在渲染过程中设置数据,则“为时已晚”。
编辑:你在“渲染”期间改变了你的价值 - 这太晚了!在渲染期间,ViewState已写入HTML流。尝试将代码移动到OnPreRender()