chudnikau
chudnikau

Reputation: 39

Creating and finding dynamic controls on a page

There is a problem to find a dynamic control on a page. The dynamic control is created every time when a user press a button. The button calls the following JavaScript function and create a new components.

<script type="text/javascript">
    var uploadCount = 1;
    function addFileInput(fName) {
        var only_file_name = fName.replace(/^.*[\\\/]/, '');
        var $div = $('<div />', {runat: 'server'});
        var $cbox = $('<input />', { type: 'checkbox', id: 'attachement' + uploadCount, value: fName, checked: "true", runat: 'server'}).addClass;
        var $label = $('<label />', { 'for': 'attachement' + uploadCount, text: only_file_name });
        $div.append($cbox);            
        $div.append($label);
        $('#newAttachment').append($div);
        $("#uploadCountValue").prop("value", uploadCount);
        uploadCount++;            
    }
</script>

newAttachment is DIV section on the page.

<div id="newAttachement" runat="server" />

The DIV section is situated inside section. The problem is when a user presses the button on the form I can't find the dynamic created components. The following code shows how I try to find the components:

 for (int i = 1; i <= Convert.ToInt32(uploadCountValue.Value); i++)
            {
                if (RecursiveFind(newAttachement, "attachement" + i) != null)
                {
                    ... to do something
                }
}

public Control RecursiveFind(Control ParentCntl, string NameToSearch)
{
    if (ParentCntl.ID == NameToSearch)
       return ParentCntl;

    foreach (Control ChildCntl in ParentCntl.Controls)
            {
                Control ResultCntl = RecursiveFind(ChildCntl, NameToSearch);
                if (ResultCntl != null)
                    return ResultCntl;
            }
            return null;
}

I have detected that Controls count value is always zero in spite of there are dynamic components there. I would be happy to get any help from us. Thanks.

Upvotes: 0

Views: 197

Answers (2)

Marcelo Acosta
Marcelo Acosta

Reputation: 189

to find the controls created in the client-end you can't search them in the Page.Controls collection instead try to look for them in the Request.Form[] array

Upvotes: 1

Abhitalks
Abhitalks

Reputation: 28387

you are creating the dynamic controls in javascript? i.e. you are creating html elements in javascript. It won't matter even if you put a runat="server" attribute in there, because it is still at the client-end. That would not be a part of the viewstate bag, so not populated in the controls collection.

you need to change your logic. create dynamic control in code-behind on button postback.

Upvotes: 0

Related Questions