Dynamically added controls in Asp.Net

后端 未结 9 1638
情书的邮戳
情书的邮戳 2020-12-01 02:22

I\'m trying to wrap my head around asp.net. I have a background as a long time php developer, but I\'m now facing the task of learning asp.net and I\'m having some trouble w

9条回答
  •  無奈伤痛
    2020-12-01 02:57

    If you truly need to use dynamic controls, the following should work:

    • In OnInit, recreate the exact same control hierarchy that was on the page when the previous request was fulfilled. (If this isn't the initial request, of course)
    • After OnInit, the framework will load the viewstate from the previous request and all your controls should be in a stable state now.
    • In OnLoad, remove the controls that are not required and add the necessary ones. You will also have to somehow save the current control tree at this point, to be used in the first step during the following request. You could use a session variable that dictates how the dynamic control tree was created. I even stored the whole Controls collection in the session once (put aside your pitchforks, it was just for a demo).

    Re-adding the "stale" controls that you will not need and will be removed at OnLoad anyway seems a bit quirky, but Asp.Net was not really designed with dynamic control creation in mind. If the exact same control hierarchy is not preserved during viewstate loading, all kinds of hard-to find bugs begin lurking in the page, because states of older controls are loaded into newly added ones.

    Read up on Asp.Net page life cycle and especially on how the viewstate works and it will become clear.

    Edit: This is a very good article about how viewstate behaves and what you should consider while dealing with dynamic controls: http://geekswithblogs.net/FrostRed/archive/2007/02/17/106547.aspx

提交回复
热议问题