リストボックス内の各項目に対してHiddenFieldsを動的に作成しているWebサイトがあります。FindControl()がコントロールを見つけられない
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を
内で変更されていて、保存ボタンがクリックされたときに、クリック時の機能は、すべてのHiddenFields通過し、バック値を読み出すために実行されます。
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 LineがNULLを返すことです。 私はIE9で開発ツールを持ち出し、それが正しいIDで存在することを確認しました。しかしそれでもNULLを返します。
これ以上情報が必要な場合は、私ができる限り最善を尽くしてください。
EDIT
次の行がculperateですが、私は理由ダッシュの信じています。欄のIDに表示されていても、
Environmental Health – Does the application involve any of the following:
JavaScriptはまだ制御を見つけて値を変更することができます。
私はダッシュで別のものを見つけましたが、それは間違いなく見つかっています。この行をしているように見えるだけ...
これはあなたと似ていますので、これをご覧ください。 http://stackoverflow.com/questions/7495486/button-click-event-not-firing-within-use-control-in-asp-net/7495550#7495550 –
不幸にも私にとってはうまくいかないほど違っています。 – Seige
これは、ビューステートをコントロールに戻すことができるように隠しボックスが存在することを確認する必要があることを要約しています。したがって、page_loadイベントでコントロールを再作成します。 –