在页面上找到动态控件时出现问题。每次用户按下按钮时都会创建动态控件。该按钮调用以下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>
<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;
}
我已经检测到控件计数值总是为零,尽管那里有动态组件。 我很乐意得到我们的帮助。感谢。
答案 0 :(得分:1)
找到在客户端创建的控件,你无法在Page.Controls集合中搜索它们,而是尝试在Request.Form []数组中查找它们
答案 1 :(得分:0)
你是在javascript中创建动态控件吗?即你在javascript中创建html元素。即使你在其中放置一个runat =“server”属性也没关系,因为它仍然在客户端。这不会是viewstate包的一部分,因此不会填充在控件集合中。
你需要改变你的逻辑。在按钮回发的代码隐藏中创建动态控件。