嵌套的asp.net Repeater使用实体数据模型4.5

时间:2013-12-05 00:01:40

标签: asp.net entity-framework

我正在尝试使用实体数据模型4.5创建嵌套转发器,但结果不是预期的。 我搜索了一个解决方案,但我找不到任何好的答案。大多数这些主题都在讨论如何使用DataSet进行创建。

asp.net:

<asp:Repeater ID="rptChannels" runat="server" DataSourceID="edsChannels">
<ItemTemplate>
    <div class="channel">
        <span><%# Eval("ChannelName")%></span>
        <asp:Repeater ID="rptChannelsPosts" runat="server" DataSource='<%# Eval("ChannelsPosts")%>'>
            <ItemTemplate>
                <div class="channelPost">
                    <span><%# Eval("Title")%></span>
                    <span><%# Eval("Description")%></span>
                </div>
            </ItemTemplate>
        </asp:Repeater>
    </div>
</ItemTemplate>

没有cs代码。

关于.edmx文件,它包含2个实体(Channels,ChannelsPosts),它们之间存在关系。

结果: 页面上仅显示频道名称,并且不显示ChannelsPost。

Channel 1
Channel 2
Channel 3

我不知道我的代码到底错在哪里,请帮忙。

Channel 1
     Post 1.1
     Post 1.2
Channel 2
     Post 2.1
Channel 3
     Post 3.1
     Post 3.2
     Post 3.3

任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:1)

为了将EntityDatasource与嵌套转发器一起使用,您将需要两个EntityDatasource,它们的结构应如下所示:

<Outer Repeater>
    <Inner Repeater>
    </Inner Repeater>
    <Inner EntityDatasource />
</Outer Repeater>
<Outer EntityDatasource />

您需要将通道ID从外部转发器传递到内部EntityDatasource。在外部转发器内添加隐藏字段以保存ChannelID。在内部EntityDatasource中,将ControlId的控制参数添加到隐藏字段。您的标记应如下所示:

<asp:Repeater ID="rptChannels" runat="server" DataSourceID="edsChannels">
    <ItemTemplate>
        <div class="channel">
            <span><%# Eval("ChannelName")%></span>
            <asp:HiddenField ID="hdnId" Value='<%#Eval("Id") %>' runat="server" />
            <asp:Repeater ID="rptChannelsPosts" runat="server" DataSourceID="edsChannelsPosts">
                <ItemTemplate>
                    <div class="channelPost">
                        <span><%# Eval("Title")%></span>
                        <span><%# Eval("Description")%></span>
                    </div>
                </ItemTemplate>
            </asp:Repeater>
            <asp:EntityDataSource ID="edsChannelsPosts" 
                runat="server" ConnectionString="name=EDMTestEntities" 
                DefaultContainerName="EDMTestEntities" CommandText="" 
                EnableFlattening="False" EntitySetName="ChannelsPosts" 
                EntityTypeFilter="ChannelsPost" Where="it.channel=@channel">
                    <WhereParameters>
                        <asp:ControlParameter ControlID="hdnId" PropertyName="Value" Type="int32" DefaultValue="" Name="channel"/>           
                </WhereParameters>
            </asp:EntityDataSource>
        </div>
    </ItemTemplate>
</asp:Repeater>
<asp:EntityDataSource ID="edsChannels" runat="server" 
    ConnectionString="name=EDMTestEntities" 
    DefaultContainerName="EDMTestEntities" 
    EnableFlattening="False" EntitySetName="Channels">
</asp:EntityDataSource>

输出应该是这样的:

enter image description here

Here's指向我测试项目的链接。