我遇到了这个问题 - 我正在使用没有.net 3.5的服务器上的ASP.NET AJAX应用程序,这意味着我无法使用ListView(BOO!)。
我决定简单地做一个丑陋的方法来制作一个表并给tbody一个ID和一个runat服务器标签,并将HtmlControls放在代码隐藏中(顺便说一句 - 这是一个用户控件,以防它有所不同)。
一切正常 - 直到页面进行部分回发 - 并且所有元素都消失了,因为标签是在服务器上运行的,我认为它需要在页面加载中重新填充。
是否无法将数据实际保留在部分回发上?当我在后端说出来时,只有控件的内容发生变化?
我想我可以在填充控件时将内容保存在会话对象中,然后只使用会话对象在Page_Load中重新填充 - 但我希望有更好的方法来执行此操作?
答案 0 :(得分:0)
您应该重新创建在Page_Init事件中动态创建的所有控件,并在Page_Load中重新填充它们。您也可以参考这篇文章http://www.4guysfromrolla.com/articles/092904-1.aspx。
答案 1 :(得分:0)
如果问题出在保存状态。 ControlState
正好适合这样做。
从msdn(http://msdn.microsoft.com/en-us/library/1whwt1k7.aspx)考虑这个问题
或尝试以下代码。
protected override object SaveControlState()
{
object[] ControlStateData = new object[];
//save your data like ControlStateData[0] = ActivePage;
return ControlStateData;
}
protected override void LoadControlState(object savedState)
{
object[] ControlStateData = savedState as object[];
//Load your data like ActivePage = (int) ControlStateData[0];
base.LoadControlState(ControlStateData[2]);
}
//Dont forget to add this procedure
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
Page.RegisterRequiresControlState(this);
}