Доступ к кнопке в повторителе из кода сзади (C #) - PullRequest
3 голосов
/ 30 апреля 2011

Я нахожу некоторые серьезные проблемы с доступом к кнопке, помещенной в повторитель, из кода позади.

Это код повторителя:

  <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 ]

3 голосов
/ 30 апреля 2011

Я уверен, что я решил вашу проблему с тем, почему вы получаете 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; 
    }
}
0 голосов
/ 30 апреля 2011

на .aspx

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

в коде позади

//global  scope  
public bool IsAuthor=false;

//in pageload event

IsAuthor= GetIsAuthor();
0 голосов
/ 30 апреля 2011

Вы не можете найти такой элемент управления. Что вам нужно сделать, это прикрепить событие к повторителю «событие привязки данных элемента» и в этом обработчике события сделать:

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