我正在尝试使用实体数据模型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
任何建议都表示赞赏。
答案 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>
输出应该是这样的:
Here's指向我测试项目的链接。