如何使用asp.net中的更新面板更新Repeater的ItemCommand上的Panel Out side Repeater?

时间:2013-04-03 13:09:08

标签: asp.net asynchronous updatepanel repeater

我有一个在Repeater中显示的客户端列表。我在Repeater中有一个Details Button,它在单击时显示客户端的详细信息。对于Sample,现在只添加了'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*

在.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>

在Repeater项目命令中:

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);
        }
        }
    }

这会导致我想要阻止的全页回发。单击Repeater行,必须使用AsynPostBack显示详细信息。 将“触发事件”添加到“弹出”div时,表示无法找到控件

帮助感谢! 谢谢!

1 个答案:

答案 0 :(得分:0)

您有两个选项之一:

1)取消注释此代码并将EventName="RepDetails_ItemCommand"更改为EventName="ItemCommand"

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

2)将Repeater放入UpdatePanel的<ContentTemplate>