转发器控件

时间:2017-05-11 11:41:32

标签: c# asp.net

我在转发器控件中有一个按钮,我想禁用它。我试过这样的事......

if (Session["USER_ID"] == null)
{
   //disable download button and     
}
else
{
   //enable download button
}

这是我要启用和禁用btnTEST

的按钮
<asp:Repeater ID="Repeater1" runat="server" 
     OnItemCommand="Repeater1_ItemCommand">
   <ItemTemplate>            
         <asp:Image ID="image" ImageUrl='<%# Eval("image_src")%>' runat="server"  />                           
         <asp:Button ID="btnTEST" runat="server" Text="Click Me!" CommandName="testme" Enabled="False" />                          
   </ItemTemplate>
</asp:Repeater>

我无法使用它:

btnTest.Enabled = True;

由于某种原因,它不起作用。

2 个答案:

答案 0 :(得分:3)

由于按钮位于Repeater控件内部,因此它将动态生成与数据源数据绑定中的项目一样多的次数。因此,您必须启用/禁用repeater ItemDataBound-event上的按钮,如下所示:

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Button btn = (Button)e.Item.FindControl("btnTEST");

        if (Session["USER_ID"] != null)
        {
            btn.Enabled = true;
        }
    }

}

聚苯乙烯。无需禁用,因为默认情况下禁用该按钮。

答案 1 :(得分:1)

因为按钮位于转发器中。您需要禁用itemdatabound中的按钮。我建议你在后面的代码中添加这样的东西:

protected override void OnInit(EventArgs e)
{
       base.OnInit(e);
       Repeater1.ItemDataBound += (s, ev) =>
       {
           if (ev.Item.ItemType != ListItemType.AlternatingItem && ev.Item.ItemType != ListItemType.Item)
                    return;
             var btnTest= ((System.Web.UI.WebControls.Button) ev.Item.FindControl("btnTEST"));
             btnTest.Enabled = Session["USER_ID"] != null;
        };
 }