为什么ASP.NET Repeater.Items收集空,当控件在屏幕上?(Why is the A

2019-10-20 00:20发布

我有以下的中继器ASP页:

<asp:Repeater runat="server" ID="RegionRepeater"
    DataSourceID="SqlDataSourceRegions" EnableViewState="true">
    <ItemTemplate>
        <tr>
            <td valign="top">
                <b><%#Eval("description")%></b>
                <asp:HiddenField runat="server" ID="RegionID"
                    Value='<%#Eval("region_id")%>'/>
            </td>
            <td>
                <asp:FileUpload ID="FileUpload" runat="server" Width="368px" />
            </td>
        </tr>
    </ItemTemplate>
</asp:Repeater>

(中继器是一个向导内,内容窗格内)。

后面的代码被连接到

protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e)

事件。 还有屏幕上的两个项目(表内两行)。 然而,当代码尝试读取这些项目,项目集合是空的!

foreach(RepeaterItem region in RegionRepeater.Items)
{
    // Never runs - the RegionRepeater.Items.Count = 0
    FileUpload fileUpload = (FileUpload) region.FindControl("FileUpload");
    String regionID = ((HiddenField)region.FindControl("RegionID")).Value;
    ...

为什么是空集,当有控制屏幕上的画?

非常感谢您的帮助; 这是开始我发疯。

(顺便说一句:我尝试添加/移除的EnableViewState =“真”的标签)

Answer 1:

你已经确定的中继器已经反弹回发?

在ASP.NET页生命周期意味着回发,则需要重新绑定,如中继器控件,以便事件处理程序才能够看到的数据。



Answer 2:

检查是否有一个Page.DataBind()在页面后面的代码。 这使得你的中继与空数据绑定。



Answer 3:

也许你做的每一个加载页面时数据绑定,你检查有没有postbacl你做之前?



Answer 4:

我相信,当结合项目中只填入。 所以,你必须重新绑定在每一个页面加载数据。 这是由于网络的statless环境; 它不记得数据源,但是从被绑定到它的视图状态加载创建的控件。

因此,在后续请求中,它加载控制层次,但一无所知创建了UI,除非你再重新绑定的数据源。

HTH。



文章来源: Why is the ASP.NET Repeater.Items collection empty, when controls are on the screen?