2013-04-03 40 views
0

我有一個顯示在Repeater中的客戶端列表。 Repeater中有一個Details Button,它顯示單擊時的客戶端詳細信息。現在,示例僅添加了「ClientName」。 *When i Click on 'Details' LinkButton in Repeater it Displays the Details of Selected Row. But, this causes FullPage Post Back! Which i want to Prevent. Just i want to Update the Panel which displays the Details when row is selected from Repeater*如何使用asp.net中的更新面板更新Repeater的ItemCommand上的面板外側中繼器?

在.aspx頁面中:

<script> 
    function ShowPopUp() { 
     var listItemsRegion = document.getElementById('popup'); 
     popup.style.display = "block"; 
    } 
    function ClosePopup() { 
     var listItemsRegion = document.getElementById('popup'); 
     popup.style.display = "none"; 
    } 
</script> 

<asp:Repeater ID="RepDetails" runat="server" OnItemCommand="RepDetails_ItemCommand"> 
      <HeaderTemplate> 
       <table class="tabl"> 
        <tr style="background-color: #808080; color: White"> 
         <td class="lblCenter"> 
          <asp:Label ID="Label4" runat="server" Text="City" Font-Bold="true" CssClass="lbl"></asp:Label> 
         </td> 
         <td class="lblCenter"> 
          <asp:Label ID="Label3" runat="server" Text="Age" Font-Bold="true" CssClass="lbl"></asp:Label> 
         </td> 
         <td class="lblCenter"> 
          <asp:Label ID="Label1" runat="server" Text="Gender" Font-Bold="true" CssClass="lbl"></asp:Label> 
         </td> 
         <td class="lblCenter"> 
          <asp:Label ID="Label5" runat="server" Text="Details" Font-Bold="true" CssClass="lbl"></asp:Label> 
         </td> 
        </tr> 
      </HeaderTemplate> 
      <ItemTemplate> 
       <tr class="<%# Container.ItemIndex % 2 == 0 ? "rowEven" : "rowOdd" %>"> 
        <td class="lblCenter"> 
         <asp:Label ID="lblCity" runat="server" Text='<%#Eval("City") %>' /></td> 
        <td class="lblCenter"> 
         <asp:Label ID="lblAge" runat="server" Text='<%#Eval("Age") %>' /></td> 

        <td class="lblCenter"> 
          <asp:Label ID="lblGen" runat="server" Text='<%#Eval("Gender") %>' CssClass="lbl"></asp:Label> 
         </td> 
        <td class="lblCenter"> 
        <asp:LinkButton ID="lblDetails" runat="server" CommandName="Display" 
          CommandArgument='<%#Eval("ID") %>'>Details</asp:LinkButton></td> 
        <asp:Label ID="rlblClientname" runat="server" Text='<%#Eval("Client") %>' Visible="false"></asp:Label> 
        </tr> 

      </ItemTemplate> 
      <FooterTemplate> 
       </table> 
      </FooterTemplate> 
</asp:Repeater> 

<div id="popup" style="display: none"> 
    <asp:UpdatePanel ID="UpdatePanel6" runat="server"> 
     <ContentTemplate> 
    <table width="80%" align="center"> 
     <tr> 
      <td>&nbsp;</td> 
      <td width="30%">&nbsp;</td> 
      <td>&nbsp;</td> 
     </tr> 
     <tr> 
      <td>&nbsp;</td> 
      <td> 
       <asp:Label ID="Label15" runat="server" CssClass="lbl" Text="Client Code"></asp:Label> 
      </td> 
      <td> 
       <asp:Label ID="lblClientName" runat="server" CssClass="lbl"></asp:Label> 
      </td> 
     </tr> 
     <tr> 
      <td>&nbsp;</td> 
        <td>&nbsp;</td> 
      <td> 
       <input id="Button2" type="button" value="Close" onclick="ClosePopup();" class="but" />&nbsp;</td> 
     </tr> 
    </table> 
     </ContentTemplate> 
    <%-- <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="RepDetails" EventName="RepDetails_ItemCommand" /> 
     </Triggers>--%> 
</asp:UpdatePanel> 
</div> 

直放站項目命令:

protected void RepDetails_ItemCommand(object source, RepeaterCommandEventArgs e) 
     { 
      if (e.CommandName == "Display") 
      { 
       LinkButton lblDetails = (LinkButton)e.Item.FindControl("lblDetails"); 
     Label rlblClientname = (Label)e.Item.FindControl("rlblClientname"); 
     if (lblDetails != null && e.CommandArgument != null) 
       { 
        string val = e.CommandArgument.ToString(); 
      if (rlblClientname != null && rlblClientname.Text != string.Empty) 
        { 
         lblClientName.Text = rlblClientname.Text; 
        } 
      string scrpt = "ShowPopUp();"; 
      Page.ClientScript.RegisterStartupScript(this.GetType(), "s", scrpt, true); 
     } 
     } 
    } 

這將導致整頁的回發,我要復讀的Prevent.Onclick行的細節必須顯示與AsynPostBack。 當添加觸發事件到'彈出'div然後它說控制無法找到

幫助讚賞! 謝謝!

回答

0

你有兩個選擇之一:

1)取消註釋此代碼,改變EventName="RepDetails_ItemCommand"EventName="ItemCommand"

<Triggers> 
     <asp:AsyncPostBackTrigger ControlID="RepDetails" EventName="ItemCommand" /> 
    </Triggers> 

2)將直放站在UpdatePanel

+0

感謝@AdamM爲的<ContentTemplate>回覆!這是它在最後一段中提到的。 「當添加觸發器事件到'彈出'div,然後它說控制無法找到」斜體。 :( –