Я пытаюсь отобразить в 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 (я упростил его для ясности и не включил объявление CustomerCollection, которое я использую в своей привязке ASP.NET):
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».
Я уверен, что что-то делаю не так, но не могу найти что. Когда я добавляю свойство с именем FullName в свой объект Customer и позволяю получателю возвращать DynamicProperties.FullName, он работает как шарм (мой ASP.NET Eval в данном случае ссылается на FullName, а не на DynamicProperties.FullName) .
Идея? Спасибо, Омид.