将在嵌套转发器

时间:2015-06-18 15:00:52

标签: javascript html asp.net

我有一个嵌套的转发器,每次编译项目时,VS都会自动从设计器中删除内部转发器的声明,我必须再次手动添加它。

protected global::System.Web.UI.WebControls.Repeater rptrSubscriptions;

我删除了VS临时文件,在阅读了像我这样的其他问题之后,我还将页面转换为网页表单。 最后我将内部转发器更改为GridView,因为我认为嵌套转发器可能存在错误,但我仍然遇到同样的问题。

为了测试嵌套转发器工作正常,我添加了一个名为repeater1的空转发器,它工作正常:它不会在编译时被删除。 任何建议将不胜感激。

<%--================================================================--%>
<asp:Repeater ID="rptrSubscriptionGroups" runat="server" OnItemDataBound="rptrSubscriptionGroups_ItemDataBound" OnItemCommand="rptrSubscriptionGroups_ItemCommand">
    <ItemTemplate>
        <div>
            <asp:Table ID="Table1" runat="server" BorderStyle="Solid" BorderWidth="1" Width="950">
                <asp:TableRow CssClass="SolidBorder">
                    <%--SHow Subscriptions ( Left Side )--%>
                    <asp:TableCell Width="550">
//some source here
                    </asp:TableCell>
                    <asp:TableCell>
                        <div class="">
                            <%--SHow Small TV+Radio Images--%>
                            <a href="#" style="text-decoration: none">
                                <asp:ImageButton ID="imgTVRadio" alt="" Style="width: 220px; height: 50px;" runat="server" OnCommand="SubscriptionGroup_Click" CommandName="SubscriptionClick" CommandArgument='<%# DataBinder.Eval(Container.DataItem,"ID")+","+DataBinder.Eval(Container.DataItem,"GroupName") %>' BorderStyle="None" />
                            </a>

                            <%-- ===========Test repeater that will not be removed from designer ====================================--%>
                            <asp:Repeater ID="Repeater1" runat="server"></asp:Repeater>

                            <%-- =========== repeater that will  be removed from designer ====================================--%>
                            <asp:Repeater ID="rptrSubscriptions" runat="server" OnItemDataBound="rptrSubscriptions_ItemDataBound" OnItemCommand="rptrSubscriptions_ItemCommand">
                                <ItemTemplate>
                                    <asp:Table ID="Table2" class="NoBorderInTable" runat="server" BorderStyle="Solid" BorderWidth="1" Width="380px">
                                        <asp:TableRow CssClass="SolidBorder" Style="background-color: lightgray; border-color: white" Height="30px">

                                            <%--Show Radio Buttons--%>
                                            <asp:TableCell>
                                        <%--<asp:RadioButton ID="RadioButton1" runat="server" />--%>
                                        <input name="SubscriptionSelected" id="SubscriptionSelected" type="radio" value="1">
                                        <%--Focuses on the selected radio button--%>
                                        <script>
                                            $('#tableSelect tr').click(function () {
                                                $(this).find('th input:radio').prop('checked', true);
                                            })
                                        </script>
                                            </asp:TableCell>

                                        </asp:TableRow>
                                    </asp:Table>
                                </ItemTemplate>
                            </asp:Repeater>
                            <%--=====================================================================================================--%>
                        </div>
                    </asp:TableCell>
                </asp:TableRow>
            </asp:Table>
        </div>
    </ItemTemplate>
</asp:Repeater>

1 个答案:

答案 0 :(得分:1)

内置中继器或任何其他服务器控件不应该在您的设计器中。因此,如果您更改了标记中触发更新designer.cs的任何内容,它将删除所有内部服务器控件。

转发器大多数时间都会有多个项目(这就是你使用转发器的原因)。因此,如果您有10个项目绑定到您的转发器,您将无法在设计器中获得10个内部转发器。您在设计师中也不会获得1个内部中继器,因为它无法用于控制10个。

您应该在DataItemBound rptrSubscriptionGroups_ItemDataBound中访问内部转发器。我总是使用与我在标记中使用的名称相同的名称,因此它清楚你的意思:

protected void rptrSubscriptionGroups_ItemDataBound(object sender, RepeaterItemEventArgs args) {
    //Get the inner repeater in the current repeater-item
    Repeater rptrSubscriptions = args.Item.FindControl("rptrSubscriptions") as Repeater;
    if (rptrSubscriptions != null) {
        //Do what you need todo for this inner repeater
        rptrSubscriptions.DataSource = someSource; //args.Item.DataItem should be the DataSource-item you bound to rptrSubscriptionGroups so use that to sort your Source for the inner repeater
        rptrSubscriptions.DataBind();
    }
}