回发后属性为null - 动态加载控件

Fox*_*Fox 6 asp.net ascx

我知道这个问题之前已被问过多次,但我怀疑我有一个独特的场景.

我正在加载一个Child Control(ASCX)并在该Control上设置一个Property.这个工作完全正常,直到postback属性为null.

这里加载ChildControl的First Class:

protected override void CreateChildControls()
{
    MyUserControl control = (MyUserControl)Page.LoadControl(_ascxPath);
    control.MyProperty = base.MyProperty
    Controls.Add(control);
}
Run Code Online (Sandbox Code Playgroud)

然后,在我的Child Control上,我得到了以下代码:

public partial class MyUserControl : UserControl
{
    public MyType MyProperty { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {
        //Exception on next line because Property is null (only on postback)
        var somevalue = MyProperty.SubProperty;
Run Code Online (Sandbox Code Playgroud)

Joh*_*y_D 12

好.让我试着解释一下.
1.创建页面后,您将获得整页生命周期
2.您单击某个控件以创建用户控件,然后您就可以获得它
3.现在您正在为此控件输入值,并获得回发
4.在服务器端回发处理,但正如您可以看到加载页面后立即显示视图状态操作.
viewstate的主要目的之一是处理控制事件,查看它们是否已更改,或保存其状态或其他内容.
5.如果此时,当加载viewstate时,你仍然没有构造控件,那么它的所有事件和值都将被忽略.

解决方案要么使其成为静态控件而只是隐藏它,要么在viewstate操作开始之前创建它.


Imr*_*uch 5

您需要在Page_Init事件中添加控件和设置属性,否则您将丢失属性值.

  • 亲爱的,不用担心,很高兴你得到答案,无论谁给谁.干杯 (2认同)