2009-10-12 97 views
0

我試圖改變一對服務器控件(特別是LinkBut​​ton和Label)在相同LinkBut​​ton的onclick事件期間嵌套在中繼器的ItemTemplate部分內部的可見性。實際上我已經找到了解決方案,但我不明白它爲什麼會起作用,而不是我之前嘗試的方式。我試圖最初如下:爲什麼FindControl不能與我的中繼器一起工作?

嵌套ItemTemplate模板內的中繼器的

<asp:LinkButton ID="lnAdd" CommandArgument='<%#Eval("index") %>' runat="server" Text="Add" OnClick="lnAdd_Click"> </asp:LinkButton> 

<asp:Label Visible="false" runat="server" ID="videoAdded" Text="Video Added"></asp:Label> 

然後就是lnAdd_Click函數中我有:

Repeater1.FindControl("lnAdd").Visible = false; 
Repeater1.FindControl("videoAdded").Visible = true; 

其中Repeater1是的標識中繼器這些控制是在這似乎什麼都不做(儘管它編譯)。我認爲這是因爲一些未知的原因,這些控制沒有找到。

什麼工作是以下問題的最終答案:Server controls in an asp.net repeater

的解決方案似乎做得非常類似的什麼我試圖做一些事情。它甚至在中繼器上使用FindControl。唯一的區別(我可以看到)是通過sender對象獲得中繼器。嗯,實際上,現在我認爲它的元素ID由.Net更改爲ctl00_ContentPlaceHolder1_Repeater1_ctl02_lnAdd這類實際運行時的無意義,所以也許這就是爲什麼它沒有找到它。但同時,在工作解決方案中,我只給出了像「lnAdd」這樣的正常ID。 .Net是否自動翻譯它?爲什麼它會爲此解決方案而做,而不是我原本試圖做的?

無論如何,我覺得這裏有一些基本的東西,我不是很掌握和希望得到一些啓示:d

回答

2

問題用Repeater1.FindControl(..)...是,你可以不告訴哪個特定的標籤或LinkBut​​ton被定位。它是一箇中繼器,因此每個這樣的項目都會被分配一個唯一的標識符作爲RepeaterItemCollection的一部分。在標記你的名字「lnAdd」但是這不是什麼會產生一次等

以供參考,這就是你所說的從其他崗位工作的代碼:

protected void btnUpdate_OnClick(object sender, EventArgs e) 
    { 
     Button b = sender as Button; 
     if (b != null) 
     { 
      RepeaterItem ri = b.Parent as RepeaterItem; 
      if (ri != null) 
      { 
       string name = null; 

       //Fetch data 
       TextBox txtName = ri.FindControl("txtName") as TextBox; 

我將解釋推理上述作品。首先,被點擊的按鈕是從發件人對象上轉換而來的。我們知道這是一個按鈕,因爲它是更新按鈕的點擊處理程序。接下來,我們也知道該按鈕出現在中繼器中,所以它的父代是RepeaterItem.這就是ri變量初始化和投射的方式。隨着ri對我們可用,使用它的FindControl現在將找到中給定的控件,該特定的RepeaterItem

1

你需要調用FindControl已在包含被點擊的按鈕的RepeaterItem,你做這在中繼器的OnItemCommand處理程序中,因此您可以獲取導致該命令的RepeaterItem的實例。

你必須在中繼頭添加一個OnItemCommand =「ProcessCommands」,然後添加一個ProcessCommand成員:

protected void ProcessCommands(object source, RepeaterCommandEventArgs e) 
{ 
    LinkButton button = (LinkButton)e.Item.FindControl("lbAdd"); 
    button.Visible = false; 
    ... 
} 

希望這有助於

+0

感謝您的迴應,您的方法也有效,但我更感興趣的是爲什麼我試過的失敗以及我提交的方法工作。不過,謝謝你的回答! – Trajanus 2009-10-12 22:26:50

相關問題