0

在页面上查找动态控件时出现问题。每次用户按下按钮时都会创建动态控件。该按钮调用以下 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;
}

尽管那里有动态组件,但我检测到控件计数值始终为零。我很乐意从我们这里得到任何帮助。谢谢。

4

2 回答 2

1

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

于 2013-08-20T14:49:42.367 回答
0

你是在 javascript 中创建动态控件吗?即你在javascript 中创建html 元素。即使你在那里放了一个 runat="server" 属性也没关系,因为它仍然在客户端。那不会是视图状态包的一部分,因此不会填充到控件集合中。

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

于 2013-07-05T11:08:35.967 回答