Динамический объект C # 4.0 с привязкой данных ASP.NET - PullRequest
4 голосов
/ 03 февраля 2012

Я пытаюсь отобразить в 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: Привязка данных: «System.Dynamic.ExpandoObject» не содержит свойства с именем'FullName'.

Я уверен, что делаю что-то не так, но не могу найти что.Когда я добавляю свойство с именем FullName в свой объект Customer и позволяю получателю возвращать DynamicProperties.FullName, он работает как шарм (мой ASP.NET Eval в данном случае ссылается на FullName , а не на DynamicProperties.FullName).

Идея?Спасибо, Омид.

1 Ответ

4 голосов
/ 21 сентября 2013

Eval принимает object как тип, в то время как вы предоставляете dynamic.Таким образом, приведение поможет, и использование отличительного свойства за Eval :

<%# (Container.DataItem as dynamic).FullName%>

Или коротким: если объект предоставляется, динамическое необходимо обрабатывать как любой другой тип, поскольку он отличается отобъект.

...