FindControl() 找不到控件

本文关键字:控件 找不到 FindControl | 更新日期: 2023-09-27 18:33:02

我有一个网站,该网站正在为列表框中的每个项目动态创建隐藏字段。

foreach (Checklist c in check)
{
    lbxCheckListLevel3.Items.Add(c.Name);
    HiddenField hf = new HiddenField();
    hf.ID = c.Name;
    hf.Value = c.Status + ":" + c.ResponseLabels + ":" + c.Prompt + ":" + c.Notes + ":" + c.ResponseValues;
    prompt.Controls.Add(hf);
}

HiddenField 的值正在 Javascript 中更改

然后,当单击保存按钮时,OnClick 函数将运行以遍历所有隐藏字段并读出值。

for(int i = 0; lbxCheckListLevel3.Items.Count > i; i++)
{
   //Update the main checklist with the new information                
   HiddenField hidden = (HiddenField)FindControl(lbxCheckListLevel3.Items[i].Text);
   int index = check.FindIndex(delegate(Checklist c) { return c.Name == lbxCheckListLevel3.Items[i].Text; });
   if (check[index].Status != int.Parse(hidden.Value.Split(':')[0]) || 
      check[index].Notes != hidden.Value.Split(':')[3] ||
      check[index].ResponseValues != hidden.Value.Split(':')[4]) 
   {
      check[index].Status = int.Parse(hidden.Value.Split(':')[0]);
      check[index].Notes = hidden.Value.Split(':')[3];
      check[index].ResponseValues = hidden.Value.Split(':')[4];
      check[index].Changed = true;
   }
}

我的问题是查找控制线返回 NULL。我在IE9中调出了开发人员工具,并确保它存在并具有正确的ID。但它仍然返回 NULL

如果您需要更多信息,请询问,我会尽我所能。

编辑

下面这行是罪魁祸首,我相信是因为破折号。即使它显示在字段的 ID 中

Environmental Health – Does the application involve any of the following:

Javascript 仍然能够找到控件并更改值。

我找到了另一个带有破折号

的破折号,并且没有错误地找到了那个。似乎只有这一行...

FindControl() 找不到控件

不仅其他人建议你的是有效的,而且你应该确保你的控件在Page_InitPage_Load重新创建,还要考虑你正在将你的控件添加到: prompt.Controls因此,请确保在正确的容器中进行搜索,例如尝试像这样搜索:

HiddenField hidden = (HiddenField)prompt.FindControl(...);

只有这样,您才能确保在之前添加HiddenField的同一容器中进行搜索。