J'essaie d'afficher dans un GridView ASP.NET une propriété d'un objet lié qui a été créé dynamiquement à l'aide d'un objet dynamique. Dans mon exemple, DynamicProperties.FullName est dynamique.
Mon code client est :
<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>
Mon code BLL est le suivant (je l'ai simplifié pour plus de clarté et je n'ai pas inclus la déclaration CustomerCollection que j'utilise dans ma liaison 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;
}
}
}
Lorsque j'exécute l'application, j'obtiens l'erreur HttpException suivante : DataBinding : System.Dynamic.ExpandoObject' ne contient pas de propriété portant le nom 'FullName'.
Je suis sûr que je fais quelque chose de mal mais je ne trouve pas quoi. Lorsque j'ajoute une propriété nommée FullName dans mon objet Client et que le getter renvoie DynamicProperties.FullName, cela fonctionne comme sur des roulettes (mon ASP.NET Eval renvoie à Nom complet dans ce cas et non DynamicProperties.FullName).
Une idée ? Merci, Omid.