【问题标题】:Accessing dynamically-created controls inside repeater during postback在回发期间访问转发器内动态创建的控件
【发布时间】:2013-02-14 15:37:59
【问题描述】:

我有一个带有 ReportViewer 控件的 ASP.NET 页面,该控件显示由 GET 参数指定的 SSRS 报告。我正在隐藏 ReportViewer 的 ParameterHeader 并使用 ListBox 和 CalendarExtender 等控件在 ASP.net 页面上自己显示参数(我这样做是因为不是每个人都可以查看所有内容,并且我想控制选择的报告参数显示哪些部分)。

参数的数量/类型因报告而异,因此我有一个<asp:Repeater> 数据绑定到报告的参数(我使用ServerReport.GetParameters()),我动态创建下拉/文本框/日历控件并添加它们到ReportParameterEditRepeater_ItemDataBound中的ParameterEntryPlaceholder

<table><tr>
    <td>
    <asp:Repeater ID="ReportParameterEditRepeater" OnItemDataBound="ReportParameterEditRepeater_ItemDataBound" runat="server">
        <HeaderTemplate>
            <table>
        </HeaderTemplate>
        <ItemTemplate>
            <%#Container.ItemIndex % 4 == 0 ? "<tr>" : "" %>
                <td><b><%#((ReportParameterInfo)Container.DataItem).Prompt %>: </b></td>
                <td><asp:PlaceHolder runat="server" ID="ParameterEntryPlaceholder"></asp:PlaceHolder></td>
            <%#Container.ItemIndex % 4 == 3 ? "</tr>" : "<td style='width: 20px;'></td>" %>
        </ItemTemplate>
        <FooterTemplate>
            </table>
        </FooterTemplate>
    </asp:Repeater>
    </td>
    <td>
        <asp:UpdatePanel ID="ReportRefreshUpdatePanel" ChildrenAsTriggers="True" runat="server">
            <ContentTemplate>
                <asp:Button ID="ViewReportBtn" runat="server" OnClick="ViewReportBtn_Click" Text="View Report" />
            </ContentTemplate>
        </asp:UpdatePanel>
    </td>
</tr></table>

在我的控件旁边有一个标记为“查看报告”的&lt;asp:Button&gt;,它启动了一个方法,该方法旨在收集所有参数控件的值,在 ServerReport 上设置它们,然后异步刷新报告。

但是,在“查看报告”回发期间,我看不到动态创建的控件 - ParameterEntryPlaceholder 为空。如果我重新绑定中继器,我可以看到它们,但如果我这样做,我会丢失用户的选择。

TL;DR - 如何访问我在页面加载期间、回发期间从代码后面创建/添加到表单的控件,而无需重新绑定?

【问题讨论】:

    标签: c# asp.net reporting-services repeater reportviewer


    【解决方案1】:

    无论你做什么,你需要重新绑定才能看到控件。您遇到的问题是何时在页面的生命周期中进行重新绑定。

    在回发期间,您需要在 OnInit 页面事件期间重新绑定动态添加的控件。这将允许恢复 ViewState。

    【讨论】:

    • 在控件上使用 EnableViewState=true 执行此操作,我可以看到控件并访问用户(非默认)输入。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    相关资源
    最近更新 更多