1

我有两个实体类:OrderOrderItemOrder包含类型数据绑定异常与实体导航属性

System.Data.Objects.DataClasses.EntityCollection<OrderItem> 

在aspx页的导航属性OrderItemSet绑定到此EntityDataSource一个FormView:

<asp:EntityDataSource ID="EntityDataSourceOrder" runat="server" 
    ConnectionString="name=EntitiesContext" 
    DefaultContainerName="EntitiesContext" 
    EntitySetName="Order" 
    Include="OrderItemSet" 

    // stuff to define a query 

</asp:EntityDataSource> 

而在FormView绑定到数据源,这的FormView的ItemTemplate中包含一个ListView我尝试绑定到OrderItemSet。它看起来是这样的:

<asp:FormView ID="FormViewOrder" runat="server" DataKeyNames="OrderID" 
       DataSourceID="EntityDataSourceOrder" AllowPaging="True" > 
    <ItemTemplate> 
     ... 

     <asp:ListView ID="ListViewOrderItems" runat="server" 
         DataSource='<%# Eval("OrderItemSet")%>' > 
      ... 
     </asp:ListView> 
    </ItemTemplate> 
</asp:FormView> 

当我运行该应用程序我得到一个异常指着标记线DataSource='<%# Eval("OrderItemSet")%>',告诉我:

数据绑定:System.Web.UI.WebControls.EntityDataSourceWrapper不包含名称为'OrderItemSet'的属性

这里有什么问题?

(我已经做了这不是列表,但单一的对象引用其他导航性能是相同的,那工作。)

感谢您的帮助!

回答

1

在我看来,你正在试图从数据源中评估一个集合,而没有首先绑定到那个数据源。

为什么不尝试直接绑定到数据源?例如。

<asp:ListView ID="ListViewOrderItems" runat="server" 
      DataSourceID="EntityDataSourceOrder" 
... 
</asp:ListView> 
+0

你好西安,谢谢你的回复!其实我的数据源绑定到一个FormView。而我所说的ListView是这个FormView的ItemTemplate的一部分。所以我不想将ListView绑定到订单的“完整”数据源,而只是绑定到订单的特定导航属性(OrderItems列表)。我试图在上面的问题中澄清这一点。 – Slauma 2010-03-11 15:19:25

+0

也许FormView的数据绑定发生得太晚了。您可以尝试连接到FormView的OnDataBound事件,然后以编程方式设置ListViewOrderItems的DataSource。 – codemonkeh 2010-03-14 21:49:53

+0

谢谢西安!这就是我现在正在做的事情,它的工作原理。也许你是对的,数据绑定已经太迟了,但是这个异常的错误信息是相当混乱的。我现在要关闭这个问题。 – Slauma 2010-03-18 20:31:52