我试图在ASP.NET GridView中显示使用动态对象动态创建的绑定对象的属性。在我的示例中,DynamicProperties.FullName是动态的。
我的客户代码是:
<asp:ObjectDataSource runat="server" ID="CustomerDataSource" DataObjectTypeName="Customer" TypeName="CustomerCollection" SelectMethod="LoadAll" />
<asp:GridView ID="CustomerGridView" runat="server" AutoGenerateColumns="False" DataSourceID="CustomerDataSource" EnableViewState="False">
<Columns>
<asp:BoundField DataField="FirstName" />
<asp:BoundField DataField="LastName" />
<asp:TemplateField>
<ItemTemplate>
<asp:Label runat="server" Text='<%#Eval("DynamicProperties.FullName")%>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
我的BLL代码是(为了清楚起见我简化了它,并且没有包含我在ASP.NET绑定中使用的CustomerCollection声明):
public partial class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
private dynamic _dynamicProperties;
public dynamic DynamicProperties
{
get
{
if (_dynamicProperties == null)
{
_dynamicProperties = new ExpandoObject();
_dynamicProperties.FullName = FirstName + " " + LastName;
}
return _dynamicProperties;
}
}
}
当我运行应用程序时,我收到以下HttpException错误: DataBinding:'System.Dynamic.ExpandoObject'不包含名称为'FullName'的属性。
我确信我做错了但却找不到什么。当我在Customer对象中添加一个名为FullName的属性并让getter返回DynamicProperties.FullName时,它就像一个charm(我的ASP.NET Eval在这种情况下引用 FullName 而不是DynamicProperties.FullName)
一个想法? 谢谢, OMID。
答案 0 :(得分:4)
object
时, 评估会将dynamic
作为类型。因此,演员阵容将有助于使用 Eval :
<%# (Container.DataItem as dynamic).FullName%>
或简短:在提供对象的地方,动态需要像对待任何其他类型一样对待。