Accessing controls created dynamically (c#)

后端 未结 3 1536
刺人心
刺人心 2020-12-01 20:10

In my code behind (c#) I dynamically created some RadioButtonLists with more RadioButtons in each of them. I put all controls to a specific Panel. What I need to know is how

相关标签:
3条回答
  • 2020-12-01 20:52

    I don't think creating controls in the PageLoad is the right away of doing, first the asp.net life cycle goes from Initialization;Load ViewState Data;Load PostData; Object Load etc.

    if you create controls at the Page_Load you'll lose the ViewState, events etc.

    The right away is doing at PageInit, or if is a control (OnInit).

    The next difficult is that at PageInit, you don't have the ViewState Available, if you need to reconstruct the number of objects you need to store some context/info in a hidden field ant then retrieve that information at PageInit, Create the objects and voila!

    Example:

    imagine that you need to create 1..N TextBoxes, you create html hidden field (not with runat=server) e.g. NumberOfTextBoxes.

    When you are executing PageInit Code: you retrieve the value e.g. numberOfTextBoxes = Request.Form["NumberOfTextBoxes"], then you create the TextBoxes.

    Remember the most important thing is to match the number and the order of existent Controls stored the ViewState.

    0 讨论(0)
  • 2020-12-01 20:55

    You must recreate your controls after each postback.

    ASP.NET is stateless, that is, when you postback a page to the server, your dynamically created controls won't be part of the page anymore.

    Last week I had to overcome this situation once more.

    What did I do? I saved the data that I used to create the controls inside Session object. On PageLoad method I passed that same data to recreate the dynamic controls.

    What I suggest is: Write a method to create the dynamic controls.

    On PageLoad method check to see if it's a postback...

    if(Page.IsPostBack)
    {
       // Recreate your controls here.
    }
    

    A really important thing: assign unique IDs to your dynamically created controls so that ASP.NET can recreate the controls binding their existing event handlers, restoring their ViewState, etc.

    myControl.ID = "myId";
    

    I had a hard time to learn how this thing works. Once you learn you have power in your hands. Dynamically created controls open up a new world of possibilities.

    As Frank mentioned: you can use the "is" keyword this way to facilitate your life...

    if(child is RadioButtonList)
    


    Note: it's worth to mention the ASP.NET Page Life Cycle Overview page on MSDN for further reference.

    0 讨论(0)
  • 2020-12-01 21:00

    When are you doing this in your code? Be sure you do this at the right time in the ASP life cycle or your controls don't exist yet: http://msdn.microsoft.com/en-us/library/ms178472.aspx

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