How to persist a dynamic control (c#)

前端 未结 4 1060
北荒
北荒 2021-01-16 06:15

As per the title, I have created a custom control.

On a certain button click event, this control is instantiated, then added to the page.

It is a dynamic con

相关标签:
4条回答
  • 2021-01-16 06:43

    As with all HTML pages, the control must be recreated on each page request. ASP.NET handles a lot of this 'under the hood' with mechanisms such as ViewState and Session.

    If your control is not (or can't be) tracked by ViewState, then you need to handle this yourself.

    I don't know how complex your control is, but as a starting point you may wish to read up on handling the CreateChildControls event here (MSDN)

    0 讨论(0)
  • 2021-01-16 06:50

    Usually for dynamic controls, they will have to be added on every postback and also the events need to be wired up every time.

    0 讨论(0)
  • 2021-01-16 06:57

    You should recreate dynamic controls on every postback. The best place to do that is method CreateChildControls.

    To add dynamically control after button click set in click handler some flag (persistent flag - so it should be in viewstate or in sessionstate) - it should indicate that on next page creation your control should be added to it. After this you should set ChildControlsCreated = false;
    After this CreateChildControls are executed again and your control is created correctly and is persistent (till you not clear flag).

    So it should be done in this way:

    protected override void CreateChildControls()
    {
            base.CreateChildControls();
        if (ViewState["AddControl"] == true)
            {
             Controls.Add(new MyControl() {Id = "someId" });
            }
    }
    

    And btn handler

    private void OnShowControlClick(object sender, EventArgs e)
    {
             ViewState["AddControl"] = true;
             ChildControlsCreated = false;
    }
    
    0 讨论(0)
  • 2021-01-16 07:00

    I believe all you need to do is recreate it with the same ID during pre init and the asp.net engine will populate it from the view state.

    This is off the top of my head, so I might have the details off a bit.

    0 讨论(0)
提交回复
热议问题