[英]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.