使用runat服务器标记保留html控件内容

时间:2011-01-11 10:04:58

标签: c# asp.net html ajax user-controls

我遇到了这个问题 - 我正在使用没有.net 3.5的服务器上的ASP.NET AJAX应用程序,这意味着我无法使用ListView(BOO!)。

我决定简单地做一个丑陋的方法来制作一个表并给tbody一个ID和一个runat服务器标签,并将HtmlControls放在代码隐藏中(顺便说一句 - 这是一个用户控件,以防它有所不同)。

一切正常 - 直到页面进行部分回发 - 并且所有元素都消失了,因为标签是在服务器上运行的,我认为它需要在页面加载中重新填充。

是否无法将数据实际保留在部分回发上?当我在后端说出来时,只有控件的内容发生变化?

我想我可以在填充控件时将内容保存在会话对象中,然后只使用会话对象在Page_Load中重新填充 - 但我希望有更好的方法来执行此操作?

2 个答案:

答案 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);
    }