繁体   English   中英

中继器控件内的触发按钮

[英]trigger button inside a repeater control

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

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;

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

由于该按钮位于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;
        }
    }

}

附言 无需禁用,因为默认情况下该按钮处于禁用状态。

因为按钮在中继器中。 您需要禁用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;
        };
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM