2012-05-03 16 views
1

リストボックス内の各項目に対して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はまだ制御を見つけて値を変更することができます。

私はダッシュで別のものを見つけましたが、それは間違いなく見つかっています。この行をしているように見えるだけ...

+0

これはあなたと似ていますので、これをご覧ください。 http://stackoverflow.com/questions/7495486/button-click-event-not-firing-within-use-control-in-asp-net/7495550#7495550 –

+0

不幸にも私にとってはうまくいかないほど違っています。 – Seige

+0

これは、ビューステートをコントロールに戻すことができるように隠しボックスが存在することを確認する必要があることを要約しています。したがって、page_loadイベントでコントロールを再作成します。 –

答えて

1

だけでなく、あなたが有効で示唆していると、あなたのコントロールはまた、あなたがあなたのコントロールを追加することを検討し、Page_InitまたはPage_Loadで再作成されていることを確認しなければならないものを他の人:そうしますprompt.Controls

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

だけあなたが前にあなたのHiddenFieldを追加したとあなたは同じコンテナで検索確信している、このように:あなたはこのように検索してみてください例えば、右コンテナで検索してください。

+0

コードを修正して追加します。詳細については、updateを参照してください。 – Seige

関連する問題