我有一个网站,它为列表框中的每个项目动态创建HiddenFields。
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);
}
在Javascript
中正在更改HiddenField的值然后单击“保存”按钮时,OnClick函数将运行以遍历所有HiddenField并读取值。
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;
}
}
我的问题是,FindControl行返回NULL。 我在IE9中提出了开发人员工具,并确保它存在且ID正确。但它仍然返回NULL
如果您需要更多信息,请询问,我会尽我所能。
修改
下面这行是罪魁祸首,我相信因为破折号。即使它显示在字段的ID
中Environmental Health – Does the application involve any of the following:
Javascript仍然能够找到控件并更改值。
我找到了另一个破折号,并且发现了一个没有错误。似乎只是这一行...
答案 0 :(得分:1)
不仅其他人建议您有效,而且您应确保在Page_Init
或Page_Load
重新创建控件,同时考虑您要将控件添加到:prompt.Controls
所以请确保在正确的容器中搜索,例如尝试搜索:
HiddenField hidden = (HiddenField)prompt.FindControl(...);
只有这样,您才能确保在之前添加HiddenField
的同一容器中进行搜索。