2013-11-18 2 views
1

У меня есть репитер элемента, который отображает элементы, на которые была выставлена ​​ставка пользователем. Элементы содержатся в панели, поскольку они содержат элементы формы для обновления ставки для каждого элемента отдельно. Я бы хотел, чтобы пользователь мог отправлять отдельный элемент для обновления и для меня знать, какой элемент они пытаются обновить, поэтому я могу игнорировать все остальные поля при обработке обновления.Получите поля внутри панели внутри репитера при нажатии кнопки

Сейчас мой ретранслятор выглядит следующим образом:

<asp:Repeater ID="itemRepeater" runat="server" onitemdatabound="itemRepeater_DataBound"> 
    <ItemTemplate> 
     <!-- Auction Item MASTER--> 
     <asp:Panel id="pnlDefaultButton" runat="server" DefaultButton="absenteeBtnBid"> 
      <div style="position: absolute; left: 0px; top: 0px; transform: translate(0px, 236px);" class="item auction_item firearm user_item isotope-item"> 
       <div class="item_image"> 
        <asp:HyperLink ID="item_img_link" runat="server" Visible="False" EnableViewState="False"> 
         <asp:Image ID="item_img" runat="server" Visible="False" EnableViewState="False" Width="224" /> 
        </asp:HyperLink> 
       </div> 

       <div class="item_overlay"> 
        <div class="item_buttons"> 
         <a href="#" class="follow_button">Following</a> 

         <asp:Label ID="absenteeBidLabel" runat="server" Text="" CssClass="absenteePlaceBidLabel" AssociatedControlID="absenteeBid" style="font-size:11px;" Visible="false"> 
          <asp:TextBox ID="absenteeBid" runat="server" Wrap="False" CssClass="absenteePlaceBid" placeholder="Enter Bid" /> 
         </asp:Label> 

         <asp:TextBox ID="absenteeBidId" runat="server" Wrap="False" CssClass="timedPlaceBid" style="display:none;" Visible="false" /> 
         <asp:TextBox ID="absenteeBidClose" runat="server" Wrap="False" CssClass="timedPlaceBid" style="display:none;" Visible="false" /> 
         <asp:TextBox ID="absenteeBidSaleId" runat="server" Wrap="False" CssClass="timedPlaceBid" style="display:none;" Visible="false" /> 

         <asp:Button runat="server" ID="absenteeBtnBid" cssClass="startbidding_button edit_button" OnClick="onclick_absenteeBid" Text="Edit Bid" /> 

         <div class="bid_options"> 
          <a href="#" class="bid_option first">Live Bid</a> 
          <a href="#" class="bid_option">Bid by Phone</a> 
          <asp:HyperLink ID="bid_withdraw" runat="server" CssClass="withdrawbid"></asp:HyperLink> 
         </div> 
        </div> 
        <table class="item_bidstatus" border="0" cellpadding="0" cellspacing="0" width="190"> 
         <tbody> 
          <tr> 
           <td class="status_label" width="50%">Bids:</td> 
           <td class="status_value" width="50%"><asp:Label ID="bid_count" runat="server" Text="0" /></td> 
          </tr> 
          <tr> 
           <td class="status_label">My Top Bid:</td> 
           <td class="status_value"><asp:Literal ID="bid_amount" runat="server"></asp:Literal></td> 
          </tr> 
          <tr> 
           <td class="status_label">Your Status:</td> 
           <td class="status_value status_low">LOW BID</td> 
          </tr> 
         </tbody> 
        </table> 

        <div class="item_description"> 
         <h5> 
          <asp:HyperLink ID="labelLot" runat="server">Lot #<%# Eval("item_lot")%></asp:HyperLink> - <asp:HyperLink ID="item_title" runat="server"><%# Eval("item_title")%></asp:HyperLink> 
         </h5> 
         <asp:Label ID="labelEst" runat="server" Visible="false"></asp:Label> 
         <p class="item_details"><asp:Label ID="labelDesc" runat="server"><%# Eval("item_desc")%></asp:Label></p> 
         <a href="#">&gt; Item Details</a> 
        </div> 
       </div> 
       <table class="item_footer" width="100%"> 
        <tbody> 
         <tr> 
          <td><div class="item_category"><asp:HyperLink ID="item_sale" runat="server"></asp:HyperLink></div></td> 
          <td><div class="item_daysleft">Bid left: <asp:Literal ID="bid_time" runat="server"></asp:Literal></div></td> 
         </tr> 
        </tbody> 
       </table> 
      </div> 
     </asp:Panel> 
     <!-- /Auction Item MASTER--> 
    </ItemTemplate> 
</asp:Repeater> 

Так что мой вопрос будет, как мне сделать метод onclick_absenteeBid только посмотреть на поля формы внутри панели, где была сделана подача? Или я вообще об этом думаю, используя панель в репитере?

ответ

2

В этом подходе нет ничего плохого. Вы должны найти панель контейнера в событии нажатия кнопки и найти элементы управления внутри него. Вот как вы можете это сделать:

protected void onclick_absenteeBid(object sender, EventArgs e) 
{ 
    Panel pnl = ((Button) sender).Parent as Panel; 
    if (pnl != null) 
    { 
     //Access controls inside panel here like this: 
     TextBox absenteeBidId = pnl.FindControl("absenteeBidId") as TextBox; 

     if(absenteeBidId != null) 
     { 
      string myAbsenteeBidId = absenteeBidId.Text; 
     } 


     //Access Repeater Item 
     RepeaterItem itm = pnl.NamingContainer as RepeaterItem; 
     if (itm != null) 
     { 
      // Do stuff 
     } 
    } 
} 
+0

Это выглядит очень разумно, но, похоже, не работает для меня. Если я добавлю выражение 'else' в' if (pnl! = Null) ', он загорается, сообщая мне, что' pnl' does = 'null'. Есть идеи по этому поводу? (Если я не буду отвечать в ближайшее время, это потому, что я ухожу из офиса прямо сейчас.) – James

+0

My bad! Исправленный. Панель - это родительский элемент, а не идентификатор контейнера для кнопки. – afzalulh

+0

Удивительно, большое спасибо! Это работает как шарм. :) – James

Смежные вопросы