我发现在从代码后面访问转发器中的按钮时遇到了一些严重的问题。
这是转发器代码:
<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;
我错过了什么吗?
由于
答案 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();