2013-05-22 22 views
0

我的頁面在運行時會生成一個複選框列表。我通過爲每個字符串賦值來手動設置每個框的ID。「格式」(「checkbox_ {0},n},其中n是一個運行的數字。 ?我找不到他們Page.Form.Controls。他們在哪裏安置?如何訪問不知道名稱的動態生成的控件

(我能看到的Request.Form的選中的複選框,但包含每個控制的客戶端名稱。)

謝謝。

-

---更多信息 - ---

我的迭代循環添加複選框Panel控件(在標記的頁面中創建)如下:

CheckBox checkbox = new CheckBox(); 
checkbox.Text = "Add to list"; 
checkbox.ID = string.Format("checkbox_{0}", n.ToString("0")); 
Panel1.Controls.Add(checkbox); 

的複選框很好地顯示在頁面上。我可以打勾。當我提交Http POST流包含所有那些打勾的。

在回發時,Panel1.Controls.Count爲0.當頁面第一次生成時,Panel1.Controls.Count爲200,因爲它包含大量用於佈局的LieteralControls。

回答

0

您可以在頁面對象或父控件對象上使用findcontrol方法來查找該複選框對象。像:

CheckBox chx=(CheckBox)Page.FindControl("Checkbox1"); 
if(chx!=null) 
chx.Checked = false; 

,你可以把這個insode循環也喜歡:

for(int i=0;i<n;i++) 
{ 
CheckBox chx=(CheckBox)Page.FindControl("Checkbox"+n); 
if(chx!=null) 
chx.Checked = false; 
} 
+0

謝謝。但我無法在Page.FindControl或Page.Form.FindControl中找到它們。我必須爲此設置任何頁面設置? –

+0

你可以在頁面上顯示你動態添加複選框的代碼嗎?在哪個父控件中添加複選框? –

+0

我在原始文章中添加了更多信息。謝謝。 –

0

在回傳,Panel1.Controls.Count爲0。當第一次生成的頁面,Panel1.Controls .Count爲200,因爲它包含大量的用於佈局的LieteralControl。

如果以這種方式動態添加控件,則需要在每次回發中再次添加它們(相同的ID,相同的順序)。

這意味着您需要堅持您需要添加的任何信息。例如,您可以在ViewState中存儲多個複選框,然後在每個帖子後面重新生成該數量的複選框。

+0

謝謝。但我真正想要的是讀取CheckBoxes的狀態並繼續處理它們。現在我看不到他們。是不是動態創建的複選框在ViewState中回發?那麼ASP.NET不應該再與Http POST數據結合來確定每個CheckBox的狀態? –

+0

發現這個:http://aspnet.4guysfromrolla.com/articles/092904-1.aspx聽起來像它不是那麼直接,讀取動態創建的控件的值。 –

+0

@OldGeezer - 主要限制是您需要在每次回發後重新創建控制樹。我不認爲這篇文章是完全準確的 - 我相信你可以在Init階段之後添加動態控件。 – Joe

相關問題