加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

使用ASP.NET DataBinding的C#4.0动态对象

发布时间:2020-12-16 10:01:40 所属栏目:asp.Net 来源:网络整理
导读:我试图在ASP.NET GridView中显示已使用动态对象动态创建的绑定对象的属性.在我的示例中,DynamicProperties.FullName是动态的. 我的客户代码是: asp:ObjectDataSource runat="server" ID="CustomerDataSource" DataObjectTypeName="Customer" TypeName="Cust
我试图在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).

一个主意?
谢谢,
奥米德.

解决方法

Eval将对象作为类型,而您提供动态.因此,演员将帮助并使用Eval背后的distinct属性:

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

或简短:在提供对象的地方,动态需要像任何其他类型一样对待,因为它与对象不同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读