代码之家  ›  专栏  ›  技术社区  ›  Andrew

为什么视图状态不存储使用控件添加的动态控件。添加?

  •  1
  • Andrew  · 技术社区  · 17 年前

    我正在尝试根据从下拉列表中选择的类别ID加载控件。

    这是我在switch语句中用来显示用户控件的代码。这是我知道的唯一一种实现和拥有可重用视图的方法。我对其他方法很开放,正如我读过的一些人所说,避免动态加载?

    var control =  Page.LoadControl("~/usercontrols/aCertainForm.ascx");
    exampleDivArea.Controls.Add(control);
    

    目前,它在调用上述代码的按钮单击上加载fine,但当我再次回发到同一个表单时,它将失去动态控件的状态。

    感谢您的提前回答,我很感激您的回答,希望很快我能帮助更多的人:)

    2 回复  |  直到 17 年前
        1
  •  1
  •   spookylukey    17 年前

    上面的代码需要在页面生命周期的早期运行,这样ASP.NET就可以恢复它的状态。下拉列表更改事件的服务器端事件处理程序在还原所有状态之后发生,因此为时已晚。您必须将代码添加到init或类似的地方。

    (是的,这是非常丑陋的,并且像许多事情一样,确实破坏了整个ASP.NET抽象。对不起:-)

        2
  •  0
  •   Jeff Siver    17 年前

    加载控件后,分配其ID。此代码必须在初始显示和回发时运行。并确保使用的ID是相同的。

    这是我在页面加载中使用的代码:

    var control =  Page.LoadControl("~/usercontrols/aCertainForm.ascx");
    control.id = "ACertainFormControl01";
    exampleDivArea.Controls.Add(control);
    
    if (IsPostBack)
    {
        do stuff
    }
    else
    {
        do stuff
    }