2009-10-12 98 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

相关问题