在页面上创建和查找动态控件

时间:2013-07-05 10:58:03

标签: c# jquery asp.net winforms

在页面上找到动态控件时出现问题。每次用户按下按钮时都会创建动态控件。该按钮调用以下JavaScript函数并创建新组件。

<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是页面上的DIV部分。

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

DIV部分位于部分内部。问题是当用户按下表单上的按钮时,我找不到动态创建的组件。以下代码显示了我如何尝试查找组件:

 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;
}

我已经检测到控件计数值总是为零,尽管那里有动态组件。 我很乐意得到我们的帮助。感谢。

2 个答案:

答案 0 :(得分:1)

找到在客户端创建的控件,你无法在Page.Controls集合中搜索它们,而是尝试在Request.Form []数组中查找它们

答案 1 :(得分:0)

你是在javascript中创建动态控件吗?即你在javascript中创建html元素。即使你在其中放置一个runat =“server”属性也没关系,因为它仍然在客户端。这不会是viewstate包的一部分,因此不会填充在控件集合中。

你需要改变你的逻辑。在按钮回发的代码隐藏中创建动态控件。