从Code Behind(C#)访问转发器中的按钮

时间:2011-04-30 09:46:31

标签: asp.net button repeater

我发现在从代码后面访问转发器中的按钮时遇到了一些严重的问题。

这是转发器代码:

  <asp:Repeater ID="Repeater1" runat="server">

                    <HeaderTemplate></HeaderTemplate>
                    <ItemTemplate>
                        <table>
                            <tr>
                                <td>Username:</td>
                                <td> <%# Eval("UserName") %></td>
                            </tr>
                            <tr>
                                <td>Date:</td>
                                <td><%# Eval("CommentTime") %></td>
                            </tr>
                            <tr>
                                <td>Comment:</td>
                                <td><%# Eval("Comment") %></td>
                            </tr>
                            <tr>
                                <td>
                                    <asp:Button ID="btnDeleteComment" runat="server" Text="Delete" /></td>
                            </tr>
                        </table>
                        <br />
                    </ItemTemplate>

                </asp:Repeater>

这是在页面加载后放置的代码:

  Button btn = new Button();
                    btn = (Button)Repeater1.FindControl("btnDeleteComment");
                    btn.Visible = false;

我错过了什么吗?

由于

3 个答案:

答案 0 :(得分:3)

我确信,我已经解决了为什么要获得object reference not set的问题。

正如你有这个条件语句if (e.Item.ItemType == ListItemType.Item),当它第一次迭代时,它将是一个标题项类型。由于您的按钮位于项目模板中,因此标题模板中不存在该按钮。

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
  if (e.Item.ItemType == ListItemType.Item)
    {
     Button btn = new Button(); 
     btn = (Button)e.Item.FindControl("btnDeleteComment"); 
     btn.Visible = false; 
    }
}

答案 1 :(得分:0)

你找不到像这样的控件。您需要做的是将事件附加到转发器“项数据绑定事件”,并在该事件处理程序中执行:

(Button)e.Item.FindControl("btnDeleteComment");

答案 2 :(得分:0)

on .aspx

    <asp:Button ID="btnDeleteComment" runat="server" Text="Delete" Visible='<# IsAuthor?"true":"false" >' />

中的代码

//global  scope  
public bool IsAuthor=false;

//in pageload event

IsAuthor= GetIsAuthor();