4

動的オブジェクトを使用して動的に作成されたバインドされたオブジェクトのプロパティを 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 を返すようにすると、おまじないのように機能します (この場合、ASP.NET Eval はDynamicProperties.FullName ではなくFullNameを参照します)。

アイデア?ありがとう、オミッド。

4

1 に答える 1